Запуск сеансу на екрані під час завантаження з rc.local


10

Я намагаюся запустити окремий екран під конкретного користувача в rc.local під час завантаження. Код нижче - це те, що я маю досі, але він не працює для мене. Ця частина, здається, дає мені помилку.

su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'

Відповіді:


13

Я думаю, що обидва -cпараметри ( suі bash) доведеться котирувати як мінімум.

su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"

Також -очікується, що він буде останнім і може не бути бажаним тут (див. man su).


Ще кілька зауважень. sudo може бути кращим вибором для однокадрової команди, як ваша, але не обов'язково:

sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'

Зокрема, ви можете використовувати один менший рівень цитування sudo.

Ще одна річ, з якою ви хочете бути обережними - це виконувати команди без абсолютного шляху у привілейованому контексті. Це стосується su(або sudo), але також і шляху до bashвашої команди. Ви робите це правильно screen.

Просто перевірено наступне, і це працює чудово. Я думаю -, що головне питання у вашому оригінальному рядку:

/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"

Зло зауваження: чому б вам не tmuxспробувати? Я нещодавно перейшов і ніколи не оглядався. Єдине , що мені потрібно було негайно змінити було поєднання клавіш префікс, в tmuxдефолтів до Ctrl+ B- назад до GNU screen«s Ctrl+ A.

Це дозволяє розділити вікно на майже довільну кількість панелей (вертикально і горизонтально), а його формат конфігураційного файлу (включаючи той, що відповідає статусу) фактично зрозумілий людям. Звичайно, tmuxце так добре, як screenколи ви просто хочете запустити якусь програму / сценарій, спочатку не написаний як демон у фоновому режимі. Однак, якщо ви маєте намір взаємодіяти з термінальним мультиплексором, я рекомендую tmux.


Я спробую це спробувати через декілька. Сценарій, який я виконую, використовує абсолютні шляхи, тому ви б рекомендували suчи sudo?
ATLChris

1
sudoне є хорошим вибором, якщо запустити з rc.local, де ви вже є root, оскільки ви пропустите оболонку входу. Зі сторони примітки подивіться /etc/init/tty1.conf- замініть тут [a] getty на екран.
aquaherd

@aquaherd: це те, що я мав на увазі, коли писав, але не обов’язково . Дізнайтеся, справді, у звичайному sudo su -... sudo(superuser do), su(switch user) ... гарна ідея про .conf
0xC0000022L

1
Я мушу сказати, що я поставив +1 цій публікації лише через вашу злу зауваження. Я це люблю! Це чудова заміна екрану, оскільки можна змусити його почати новий сеанс.
Квантовий фізик

@aquaherd sudoможе просто запустити оболонку для входу -i.
муру


1

Ось, що я використав, я виявив, що це найчистіший і найпростіший (перевірений, працюючи сам):

Замініть "user" на користувача, щоб запустити його як. Замініть "nameyouchoose" як ім'я екранного сеансу. Замініть "/script/start.bash" на шлях вашого сценарію.

/usr/bin/sudo -u user /usr/bin/screen -dmS nameyouchoose /script/start.bash

Джерело: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles


0

Запуск сценарію на новому окремому екрані як поточний користувач (rc.local = root):

screen -dmS <session name> <command>, Приклад:

screen -dmS screenName bash /home/user/run.sh


Запуск сценарію з rc.local як user:

runuser -l user -c 'screen -dmS screenName bash /home/user/run.sh'

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.