Launchctl: Wie kann ich einen Dienst so konfigurieren, dass er bis zum nächsten Neustart automatisch neu startet?

2434
Andrew J. Brehm

Ich habe mehrere Dienste in launchctl eingerichtet und alle werden beim Booten gestartet und automatisch neu gestartet, wenn sie aus irgendeinem Grund angehalten werden. Das ist soweit toll.

Aber manchmal möchte ich, dass einer der Dienste beendet wird und nicht für eine Weile neu gestartet wird.

Gibt es einen empfohlenen Weg, dies zu tun, außer den Dienst von launchctl zu entfernen (was ihn auch sofort stoppt, was ich nicht tun möchte)?

5

2 Antworten auf die Frage

5
Andrew J. Brehm

I found a way to do it. I added the following to the plist file.

Instead of

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

I made it

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

Just setting KeepAlive to false would interfere with the job starting at all. (It was presumably waiting to be called by someone.) But KeepAlive's status can also be determined at runtime. This service now restarts automatically when it quits for no good reason (i.e. when it is killed) but not when it quits for a reason (i.e. was shut down regularly). This is what I need.

-1
Hasaan Chop

So you want to kill the process without restarting it but you don't want to kill it immediately? Does that actually make any sense to you?

No, launchd has no such feature.

Denken Sie, es macht keinen Sinn, einen Dienst herunterfahren zu wollen, ohne ihn sofort zu töten? Ich denke, es macht nur keinen Sinn, wenn Sie nicht zwischen dem Herunterfahren eines Dienstes und dem Töten unterscheiden. Andrew J. Brehm vor 14 Jahren 0