GNU/Linux >> Tutoriels Linux >  >> Linux

systemd :SIGTERM immédiatement après le démarrage

Lorsque start.sh se termine, systemd tue tout dans le même groupe de contrôle que start.sh

Vos options sont :

  • définir KillMode dans la section Unit à traiter (la valeur par défaut est control-group). Cela obligera systemd à ne tuer que le processus qu'il a directement déclenché.

  • de ne pas faire démarrer start.sh quelque chose en arrière-plan et de le quitter, mais de l'exécuter directement au premier plan

Je pense que dans votre situation, l'option 2 est viable et plus simple.

Source :https://unix.stackexchange.com/a/231201/45329


Bien que changer le KillMode à process comme ci-dessous fonctionnera dans votre situation, ce n'est pas la solution recommandée.

[Service]
KillMode=process
...

Le problème avec KillMode défini sur process est-ce systemd perd le contrôle de tous les enfants du processus qu'il a démarré. Cela signifie que si quelque chose se passe et que l'un de vos processus ne meurt pas pour une raison quelconque, il continuera à s'attarder.

Une meilleure solution dans votre situation serait de créer tous les processus, en gardant leur pid puis attendez-les.

La commande d'attente que vous utilisez dans votre script shell peut varier en fonction du shell que vous utilisez (le lien que j'ai proposé est pour bash). Faire attendre le script shell pour tous les enfants revient en fait à démarrer un enfant, qui ne se détache pas, au premier plan.

Donc quelque chose comme ça, plus ou moins :

#!/bin/bash

# Start your various processes
process1 &
PROCESS1_PID=$!
process2 &
PROCESS2_PID=$!
process3 &
PROCESS3_PID=$!

# Wait on your processes
wait $PROCESS1_PID $PROCESS2_PID $PROCESS3_PID

# OR, if I'm correct, bash also allows you to wait on all children
# with just a plain wait like so:
wait

# reach here only after children 1, 2, and 3 died

Linux
  1. OpenDKIM ne démarre pas après la mise à niveau de Jessie vers Stretch

  2. Ssh - Comment exécuter un script immédiatement après la connexion via Ssh ?

  3. Pourquoi Systemd arrête-t-il le service immédiatement après son démarrage ?

  4. Le service Systemd ne démarre pas Nodejs ?

  5. Échec du démarrage de MongoDB - *** abandon après l'échec de fassert()

Impossible de démarrer les applications X11 après "su" ou "su -" à un autre utilisateur

Systemd :Utiliser à la fois After et Requires

Dans le fichier de service systemd, comment puis-je dire une fois que l'USB est prêt ?

Script de démarrage systemd postgresql

Fichier d'unité Systemd - WantedBy et après

Upstart :démarrer le service après un processus non-upstart