Запустите сеанс экрана при загрузке с 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