10 votes

Réinitialiser / Ingnorer un code de sortie non nul avec fleet / systemd

J'ai un service de sauvegarde appelé toutes les heures par un minuterie.de.sauvegarde . Malheureusement, le script de sauvegarde exécuté à l'intérieur du conteneur peut compléter succès mais avec des avertissements renvoyant un code de sortie non nul. Ainsi, bien que tout ait fonctionné, le conteneur s'arrête avec un code de sortie non nul. L'unité entre donc échoué l'état de la flotte.

Et dans ce cas, il semble que le timer ne redémarre pas cette unité, bien que je n'aie rien trouvé dans la documentation de systemd qui le dise.

Pour que ce soit clair : Je peux parfaitement faire en sorte que le conteneur s'arrête avec un code de sortie non nul. Mais ma minuterie ne fonctionne pas alors.

Je pourrais maintenant excapsuler ce script dans un autre qui est ensuite appelé als docker entrypoint. Mais je devrai m'assurer que la sortie sur STDOUT et STDERR est conservée d'une manière ou d'une autre.

J'ai aussi pu courir sudo systemctl reset-failed après l'échec de l'unité, mais cela me semble un peu bidon... (J'ai essayé cela et dans ce cas le timer a relancé l'unité. Mais cela ne fonctionne pas comme ExecStopPost-Task dans le fichier de service)

Y a-t-il un meilleur moyen de s'assurer qu'une unité

  • n'entre pas dans l'état d'échec bien qu'il renvoie un résultat différent de zéro, ou bien
  • réinitialiser son état après coup, ou
  • dire au timer de faire tourner cette unité même si son statut est échoué ?

12voto

Paul Dixon Points 1396

Vous pouvez préfixer votre commande avec - alors systemd ignore l'échec et ne met pas l'unité en état d'échec. Ainsi, au lieu de

ExecStart=/path/to/your/command 

Essayez

ExecStart=-/path/to/your/command 

Voir systemd pour en savoir plus.

2voto

azrdev Points 129

Au cas où vous voudriez ignorer algunos mais vous voulez toujours autres à compter pour systemd comme des erreurs, vous pouvez les spécifier dans la directive [Service] de votre fichier .service comme une liste séparée par des espaces pour SuccessExitStatus , RestartPreventExitStatus y RestartForceExitStatus . Ceux-ci prennent également des noms de signaux.

Référence : man 5 systemd.service

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X