Comment changer la valeur du timeout du service systemd?

Dans l'entreprise, je travaille maintenant, il existe un service hérité et son script d'initialisation utilise SysvInit ancien, mais fonctionne sur systemd (CentOS 7).

Parce qu'il y a beaucoup de calculs, ce service prend environ 70 secondes pour finir. Je n'ai pas configuré de timeout pour systemd et je n'ai pas modifié les configs par défaut dans /etc/systemd/system.conf , mais quand /etc/systemd/system.conf service SERVICE stop mon service service SERVICE stop après 60 secondes.

Vérification avec journalctl -b -u SERVICE.service Je trouve ce journal:

 Sep 02 11:27:46 service.hostname systemd[1]: Stopping LSB: Start/Stop Sep 02 11:28:46 service.hostname SERVICE[24151]: Stopping service: Error code: 255 Sep 02 11:28:46 service.hostname SERVICE[24151]: [FAILED] 

J'ai déjà essayé de changer la propriété DefaultTimeoutStopSec à /etc/systemd/system.conf à 90s , mais le timeout d'attente se produit toujours.

Quelqu'un at-il une idée pourquoi est-il timeouting à 60 ans? Y a-t-il un autre endroit où cette valeur de timeout d'attente est configurée? Y a-t-il un moyen de le vérifier?

Ce service fonctionne avec java 7 et pour le démoniser, il utilise JSVC . J'ai configuré le paramètre -wait avec la valeur 120 .

Mon service systemd a gardé le time en raison de combien de time cela prendrait pour démarrer aussi, donc cela a corrigé pour moi:

  1. Editez votre file systemd, pour moi c'était /usr/lib/systemd/system/node.service . Remplacez "noeud" par le nom de votre application.
  2. Utilisez TimeoutStartSec , TimeoutStopSec ou TimeoutSec (plus d'informations ici ) pour spécifier la durée du timeout d'attente pour le démarrage et l'arrêt du process. Ensuite, voici comment mon file systemd ressemblait:

     [Unit] Description=SimGUI2 Documentation=man:node(1) After=rc-local.service [Service] WorkingDirectory=/home/simulations/GUIServer/Server/ Environment="NODE_PATH=/usr/lib/node_modules" ExecStart=-/usr/bin/node Index.js Type=simple Restart=always KillMode=process TimeoutSec=infinity [Install] WantedBy=multi-user.target 
    • Vous pouvez également voir l'état actuel du timeout d'expiration en exécutant l'un de ces éléments (mais vous devrez modifier votre service pour effectuer des modifications!): /usr/lib/systemd/system )
      • systemctl show node.service -p TimeoutStartSec
      • systemctl show node.service -p TimeoutStopSec
      • systemctl show node.service -p TimeoutSec
  3. Ensuite, vous devrez recharger le systemd comme ceci:

    • systemctl reload application.service
    • Pour moi, c'était comme ça: systemctl reload node.service
  4. Maintenant, essayez de commencer votre service!

  5. Si cela ne fonctionne pas, essayez de redémarrer systemctl avec le systemctl reboot
  6. Si cela ne fonctionnait pas, essayez d'utiliser l'option –no --no-block pour systemctl comme ceci: systemctl --no-block start node . Cette option est décrite ici : "Ne pas attendre de façon synchrone que l'opération demandée soit terminée, sinon le travail sera vérifié, mis en queue et systemctl attendra que le démarrage de l'unité soit terminé. est seulement vérifié et mis en queue. "

J'espère que cela a aidé!

Exécuter systemctl show SERVICE_NAME.service -p TimeoutStopUSec Je pourrais au less voir le timeout d'attente fixé par systemd à mon service.

J'ai changé le script en un file d'unité régulière afin qu'il fonctionne correctement.