5

У меня есть несколько служб, настроенных в launchctl, и все они запускаются при загрузке и перезапускаются автоматически всякий раз, когда они останавливаются по любой причине. Пока все отлично.

Но иногда я хочу, чтобы одна из служб прекратила работу и не перезапускалась некоторое время.

Есть ли рекомендуемый способ сделать это, кроме удаления службы из launchctl (которая также немедленно останавливает ее, чего я не хочу делать)?

2 ответа2

5

Я нашел способ сделать это. Я добавил следующее в файл plist.

Вместо

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

я сделал это

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

Если установить для KeepAlive значение false, это вообще помешает началу работы. (Вероятно, он ждал, когда кто-то позвонит.) Но статус KeepAlive также может быть определен во время выполнения. Эта служба теперь перезапускается автоматически, когда она завершает работу без уважительной причины (например, когда она убита), но не когда она выходит по какой-либо причине (то есть регулярно отключается). Это то, что мне нужно.

-1

Итак, вы хотите завершить процесс, не перезапуская его, но не хотите немедленно его завершить? Это на самом деле имеет какой-то смысл для вас?

Нет, launchd не имеет такой функции.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .