Acho que os parâmetros -c ( su e bash ) precisarão ser citados no mínimo.
su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"
Também é esperado que - seja o último e pode não ser desejável aqui (veja man su ).
Mais algumas observações. sudo poderia ser uma opção melhor para um comando de ação única como o seu, mas não necessariamente:
sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
Em particular, você pode usar um nível de cotação a menos com sudo .
Outra coisa que você deve tomar cuidado é executar comandos sem caminho absoluto em um contexto privilegiado. Isso vale para su (ou sudo ), mas também para o caminho para bash em seu comando. Você está fazendo certo com screen .
Apenas testamos o seguinte e funciona bem. Eu acho que o - é o principal problema na sua linha original:
/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"
Observação negativa: por que você não tenta tmux tentar? Eu mudei recentemente e nunca olhei para trás. A única coisa que eu precisava mudar imediatamente era a combinação de prefixo que em tmux usa como padrão Ctrl + B - de volta ao Ctrl do GNU screen + A .
Permite dividir sua janela em um número quase arbitrário de painéis (verticalmente e horizontalmente) e seu formato de arquivo de configuração (incluindo o do status par) é realmente inteligível para humanos. É claro que tmux é tão bom quanto screen quando você simplesmente quer executar algum programa / script não escrito originalmente como daemon em segundo plano. Se você pretende interagir com o multiplexador de terminais, no entanto, recomendo vivamente tmux .