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:
/usr/lib/systemd/system/node.service
. Remplacez "noeud" par le nom de votre application. 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
/usr/lib/systemd/system
)
systemctl show node.service -p TimeoutStartSec
systemctl show node.service -p TimeoutStopSec
systemctl show node.service -p TimeoutSec
Ensuite, vous devrez recharger le systemd comme ceci:
systemctl reload application.service
systemctl reload node.service
Maintenant, essayez de commencer votre service!
systemctl reboot
--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.