Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/02/2020, à 15:53

katian

[ASTUCE ?] systemd, stop & service

Bonjour,

Dans un service, lors d'un

$ sudo systemctl stop <service>

si vous voulez attendre la fin du process lancé par

ExecStart=

il existe une solution :

ExecStop=/bin/bash -c "while ps -p $MAINPID > /dev/null; do /bin/sleep 1; done"

le $MAINPID contient l'ID du process lancé par ExecStart

voila...

Dernière modification par katian (Le 23/02/2020, à 16:32)

Hors ligne

#2 Le 23/02/2020, à 16:27

bruno

Re : [ASTUCE ?] systemd, stop & service

Bonjour,

Attention de ne pas faire une généralité d'un cas sans doute très particulier.
Peux-tu expliquer en détail pourquoi tu as besoin de faire cela et donner l'intégralité du fichier de service utilisé.

La variable $MAINPID n'est pas forcément renseignée (processus multiples)
Et, de ce que j'en comprends, si la variable $MAINPID contient quelque chose ExecStop va tourner indéfiniment.

#3 Le 23/02/2020, à 16:31

katian

Re : [ASTUCE ?] systemd, stop & service

mon enthousiasme me perdra, bruno voici mon service :

mc_server@.service
[Unit]
Description=Minecraft server: %i
After=network-online.target

[Service]
Type=simple
WorkingDirectory=/home/mc_user/mc_server

User=mc_user
Group=mc_user

Nice=+0

ExecStart=/usr/bin/screen -DmS mc-%i /usr/bin/java -Xmx4G -Xms2G -jar /home/mc_user/mc_server/server.jar nogui
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X stuff "stop^M"
ExecStop=/bin/bash -c "while ps -p $MAINPID > /dev/null; do /bin/sleep 1; done"

[Install]
WantedBy=multi-user.target

Hors ligne

#4 Le 23/02/2020, à 16:47

bruno

Re : [ASTUCE ?] systemd, stop & service

Je ne connais pas Minecarft, mais il y a a sûrement une manière plus fiable de faire cela. Voir https://minecraft.gamepedia.com/Tutoria … emd_Script

Et je persiste à croire que le dernier ExecStop est soit inutile ($MAINPID n'existe pas), soit une boucle infinie ($AMINPID a une valeur).

#5 Le 23/02/2020, à 17:10

kamaris

Re : [ASTUCE ?] systemd, stop & service

La boucle ne sera pas forcément infinie, si un signal a été envoyé au processus $MAINPID par la commande dans le ExecStop qui précède (je ne sais pas si c'est le cas…).
En tout cas, s'il s'agit d'attendre la fin de $MAINPID, il serait plus simple de faire

ExecStop=/bin/bash -c "wait $MAINPID"

Hors ligne

#6 Le 23/02/2020, à 18:00

katian

Re : [ASTUCE ?] systemd, stop & service

bruno, le serveur minecraft est assez mal fait je trouve, je trouvais moins efficace de faire

ExecStop=/bin/sleep 10

merc kamaris je vais essayer ce wait

Dernière modification par katian (Le 23/02/2020, à 18:01)

Hors ligne

#7 Le 23/02/2020, à 18:25

katian

Re : [ASTUCE ?] systemd, stop & service

ExecStop=/bin/bash -c "wait $MAINPID"

ne fonctionne pas

mc_server@survival.service - Minecraft server: survival
   Loaded: loaded (/etc/systemd/system/mc_server@.service; indirect; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sun 2020-02-23 18:11:12 CET; 22s ago
  Process: 5042 ExecStop=/bin/bash -c wait $MAINPID (code=exited, status=127)
  Process: 5041 ExecStop=/usr/bin/screen -p 0 -S mc-survival -X stuff stop^M (code=exited, status=0/SUCCESS)
  Process: 5006 ExecStart=/usr/bin/screen -DmS mc-survival /usr/bin/java -Xmx4G -Xms2G -jar /home/mc_user/mc_server/server.jar nogui (code=exited, status=1/FAILURE)
 Main PID: 5006 (code=exited, status=1/FAILURE)

je ferais d'autre essais plus tard

pour l'instant

ExecStop=/bin/bash -c "while ps -p $MAINPID > /dev/null; do /bin/sleep 1; done"

ne pause aucun soucis

Hors ligne

#8 Le 23/02/2020, à 18:42

kamaris

Re : [ASTUCE ?] systemd, stop & service

Ah excuse-moi, j'ai dit une bêtise : wait est fait pour attendre la fin des processus fils du shell uniquement.
Dans ton cas, ce serait plutôt

ExecStop=/bin/bash -c "tail --pid=$MAINPID -f /dev/null"

Cf. https://stackoverflow.com/questions/105 … -to-finish

Hors ligne

#9 Le 23/02/2020, à 18:45

katian

Re : [ASTUCE ?] systemd, stop & service

ok merci kamaris je ferais un essai wink

Hors ligne