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

Источник: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles

Пытаться sudo -u username вместо su - username

Другие вопросы по тегам