Я думаю, что оба -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
?