Я думаю, що обидва -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
?