Я думаю, что оба -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
?sudo
не очень хороший выбор, если вы запускаете из rc.local, где вы уже являетесь пользователем root, так как вы пропустите оболочку входа в систему. Обратите внимание:/etc/init/tty1.conf
замените [a] getty на screen здесь.sudo su -
...sudo
(делать сsu
правами суперпользователя), (переключить пользователя) ... хорошая идея о .confsudo
может хорошо запустить оболочку входа в систему, используя-i
.Попробуй
sudo -u username
вместоsu - username
источник
Вот то, что я использовал, я нашел, что это было самым чистым и самым простым (проверенная работа самостоятельно):
Замените «пользователь» на пользователя, чтобы запустить его как. Замените «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
источник