web-dev-qa-db-fra.com

Lancer une session d’écran au démarrage à partir de rc.local

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'
8
ATLChris

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 screenCtrl + 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.

12
0xC0000022L

Essayez Sudo -u username au lieu de su - username

1
prophecy201

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

Source: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles

1
Areeb Soo Yasir