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