Penso che entrambi i -cparametri ( sue bash) dovranno essere quotati al minimo.
su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"
Inoltre -dovrebbe essere l'ultimo e potrebbe non essere desiderabile qui (vedi man su).
Qualche altra osservazione. sudo potrebbe essere una scelta migliore per un comando one-shot come il tuo, ma non necessariamente:
sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
In particolare, è possibile utilizzare un livello di quotazione in meno con sudo.
Un'altra cosa con cui devi stare attento è l'esecuzione di comandi senza percorso assoluto in un contesto privilegiato. Questo vale per su(o sudo) ma anche per il percorso bashnel tuo comando. Lo stai facendo bene con screen.
Ho appena testato quanto segue e funziona bene. Penso che -sia il problema principale nella tua linea originale:
/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"
Osservazione malvagia: perché non tmuxprovi? Di recente sono passato e non ho mai guardato indietro. L'unica cosa che avevo bisogno di cambiare subito è stata la combinazione di tasti prefisso che in tmuxdefault Ctrl+ B- torna a GNU screen's Ctrl+ A.
Permette di dividere la finestra in un numero quasi arbitrario di riquadri (in verticale e in orizzontale) e il suo formato di file di configurazione (incluso quello per lo status par) è in realtà intelligibile per l'uomo. Ovviamente tmuxè buono come screenquando vuoi semplicemente eseguire un programma / script non originariamente scritto come daemon in background. Se si intende interagire con il multiplexer terminale, tuttavia, lo consiglio vivamente tmux.
suosudo?