Запустите сеанс экрана при загрузке с rc.local
Я пытаюсь запустить отдельный экран под конкретным пользователем в rc.local при загрузке. Код ниже - это то, что у меня есть, но оно не работает для меня. Часть su, кажется, дает мне ошибку.
su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
3 ответа
Я думаю, что оба -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
Ctrl + A.
Это позволяет разбить ваше окно на почти произвольное количество панелей (по вертикали и по горизонтали), и формат его файла конфигурации (включая формат для пар статуса) на самом деле понятен людям. Конечно tmux
так же хорошо, как screen
когда вы просто хотите запустить некоторую программу / скрипт, изначально не написанный как демон в фоновом режиме. Однако, если вы собираетесь взаимодействовать с терминальным мультиплексором, я настоятельно рекомендую tmux
,
Запуск сценария на новом отдельном экране от имени текущего пользователя (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'
Вот то, что я использовал, я нашел, что это было самым чистым и самым простым (проверенная работа непосредственно):
Замените "пользователь" на пользователя, чтобы запустить его как. Замените "nameyouchoose" как имя сеанса экрана. Замените "/script/start.bash" на путь вашего скрипта.
/usr/bin/sudo -u user /usr/bin/screen -dmS nameyouchoose /script/start.bash