Launchctl: как я могу настроить службу для автоматического перезапуска до следующей перезагрузки?

2346
Andrew J. Brehm

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

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

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

5

2 ответа на вопрос

5
Andrew J. Brehm

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

Вместо

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

я сделал это

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

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

-1
Hasaan Chop

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

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

Вы думаете, что не имеет смысла хотеть закрыть сервис, не убивая его немедленно? Я думаю, что это не имеет смысла, только если вы не различаете закрытие службы и ее уничтожение. Andrew J. Brehm 14 лет назад 0