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