Penso che entrambi i -c
parametri ( su
e 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 bash
nel 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 tmux
provi? 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 tmux
default 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 screen
quando 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
.
su
osudo
?