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)?

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.


-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é.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.