J'essaie d'exécuter un écran détaché sous un utilisateur spécifique dans rc.local au démarrage. Le code ci-dessous correspond à ce que j’ai jusqu’à présent, mais il ne fonctionne pas pour moi. La partie su semble me donner une erreur.
su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
Je pense que les deux paramètres -c
(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'"
De plus, -
devrait être le dernier et ne sera peut-être pas souhaitable ici (voir man su
).
Quelques remarques supplémentaires. Sudo
pourrait être un meilleur choix pour une commande one-shot 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 moins en citant avec Sudo
.
Vous devez également faire attention à l’exécution de commandes sans chemin absolu dans un contexte privilégié. Ceci est valable pour su
(ou Sudo
) mais également pour le chemin d'accès à bash
dans votre commande. Vous faites bien les choses avec screen
.
Je viens de tester ce qui suit et cela fonctionne bien. Je pense que le -
est le principal problème de votre ligne d'origine:
/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"
Mal remarque: pourquoi ne donnez-vous pas tmux
à essayer? J'ai récemment changé et jamais regardé en arrière. La seule chose que je devais changer immédiatement était la combinaison de touches de préfixe qui, par défaut dans tmux
, était: Ctrl + B - retour à GNU screen
' 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 de l'état par) est réellement intelligible pour les humains. Bien sûr, tmux
est aussi bon 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 vous recommande vivement tmux
.
Essayez Sudo -u username
au lieu de su - username
Voici ce que j'ai utilisé, je l'ai trouvé le plus propre et le plus simple (testé par moi-même):
Remplacez "utilisateur" par l'utilisateur pour l'exécuter en tant que. Remplacez "nameyouchoose" par le nom de la session d'écran Remplacez "/script/start.bash" par le chemin de votre script.
/usr/bin/Sudo -u user /usr/bin/screen -dmS nameyouchoose /script/start.bash