Je pense que les deux -c
paramètres ( su
et bash
) devront être cités au minimum.
su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"
On -
s'attend également à ce qu'il soit le dernier et peut ne pas être souhaitable ici (voir man su
).
Encore quelques remarques. sudo
pourrait être un meilleur choix pour une commande à un coup comme la vôtre, mais pas nécessairement:
sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
En particulier, vous pouvez utiliser un niveau de cotation en moins avec sudo
.
Vous devez également faire attention à exécuter des commandes sans chemin absolu dans un contexte privilégié. Cela vaut pour su
(ou sudo
) mais aussi pour le chemin d'accès à bash
dans votre commande. Vous le faites bien avec screen
.
Je viens de tester ce qui suit et cela fonctionne bien. Je pense que -
c'est le principal problème dans votre ligne d'origine:
/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"
Remarque maléfique: pourquoi ne pas tmux
essayer? J'ai récemment changé et je n'ai jamais regardé en arrière. La seule chose que je devais changer immédiatement était la combinaison de touches préfixe qui tmux
par défaut Ctrl+ B- Retour à la GNU screen
de Ctrl+ A.
Il permet de diviser votre fenêtre en un nombre presque arbitraire de volets (verticalement et horizontalement) et son format de fichier de configuration (y compris celui pour le statut par) est en fait intelligible pour les humains. Bien sûr, tmux
c'est aussi bien que screen
lorsque vous voulez simplement exécuter un programme / script non écrit à l'origine en tant que démon en arrière-plan. Cependant, si vous avez l'intention d'interagir avec le multiplexeur de terminaux, je le recommande vivement tmux
.
su
ousudo
?