Launchctl: comment puis-je configurer un service pour qu'il arrête de redémarrer automatiquement jusqu'au prochain redémarrage?

5

J'ai plusieurs services configurés dans launchctl et ils commencent tous au démarrage et redémarrent automatiquement chaque fois qu'ils s'arrêtent pour une raison quelconque. C'est génial jusqu'à présent.

Mais parfois, je veux que l’un des services s’arrête et ne redémarre pas pendant un moment.

Existe-t-il un moyen recommandé de le faire en dehors de la suppression du service de launchctl (qui l'arrête également immédiatement, ce que je ne veux pas faire)?

Andrew J. Brehm
la source

Réponses:

5

J'ai trouvé un moyen de le faire. J'ai ajouté ce qui suit au fichier plist.

Au lieu de

<key>KeepAlive</key>
<true/>

je l'ai fait

<key>KeepAlive</key>
<dict>
    <key>SuccessfulExit</key>
    <false/>
</dict>

Régler KeepAlive à false interférerait avec le début du travail. (Il était vraisemblablement en attente d'être appelé par quelqu'un.) Mais le statut de KeepAlive peut également être déterminé au moment de l'exécution. Ce service redémarre maintenant automatiquement quand il se ferme sans raison valable (c'est-à-dire lorsqu'il est tué), mais pas lorsqu'il se ferme pour une raison (c'est-à-dire qu'il a été arrêté régulièrement). C'est de quoi j'ai besoin.

Andrew J. Brehm
la source
-1

Donc, vous voulez tuer le processus sans le redémarrer mais vous ne voulez pas le tuer immédiatement? Cela a-t-il un sens pour vous?

Non, launchd n'a pas cette fonctionnalité.

Hasaan Chop
la source
Vous pensez que cela n'a pas de sens de vouloir fermer un service sans le tuer immédiatement? Je pense que cela n’a aucun sens si vous ne faites pas la différence entre arrêter un service et le tuer.
Andrew J. Brehm