J'ai lu la page de manuel du service systemd à quelques reprises, mais je n'arrive toujours pas à comprendre un modèle de base systemd:
Je veux exécuter un processus de démarrage une fois (comme un conteneur Docker ou formater un lecteur) au démarrage, avec succès jusqu'à la fin. Mais si j'utilise Type = oneshot pour cela, je ne peux pas utiliser Restart = en cas d'échec, et s'il échoue, il ne recommencera pas le travail. Suis-je en train de manquer quelque chose d'évident ici?
J'ai également essayé de définir Type = simple avec Restart = on-failure, mais cela dans de nombreux cas, j'ai besoin du comportement suivant (à partir de la page de manuel) que les services oneshot donnent:
Le comportement de one-shot est similaire à simple; cependant, il est prévu que le processus doit se terminer avant que systemd ne démarre les unités de suivi.
Mises à jour:
Restart=définissant FailureAction=[self.unit](remplacer [self.unit] par le nom de l'unité). C'est un peu hacky, mais au moins explicite et assez facile à suivre.
FailureActionprend les mêmes valeurs que StartLimitAction, et tous sauf nonedéclencher un arrêt quelconque.
Restartet à bouclermy_cmdcomme ceciExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done':, avec uneTimeoutStartSecvaleur raisonnable .