Как автоматически перезапустить запущенную службу, если она завершается с кодом выхода 78

Я загружаю двоичный файл с помощью службы launchd. Это должно быть связано каждый раз, когда система перезагружается. Ниже мой файл plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example</string>
<key>ProgramArguments</key>
<array>
    <string>/etc/example/usr/sbin/example_cbinary</string>
</array>
<key>RunAtLoad</key>
    <true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>

Иногда он завершается с 78 кодами выхода.

launchctl list | grep example
-   78  com.example

Я не могу найти основную причину для этого. Как это происходит раз в сто раз. Чтобы решить эту проблему, я выгружаю и загружаю этот сервис. Я хотел, чтобы он автоматически выгружался и загружался всякий раз, когда выходит из режима 78.

Любая помощь очень заметна

Спасибо в Adavance

1 ответ

Я знаю, что это старая статья, но у меня была та же проблема, и я мог решить ее, написав сценарий Python, который ищет 78 и вызывает системную команду, например сценарий оболочки, для выгрузки и загрузки службы. И поместите этот скрипт в crontab

псевдокод:

#!/бин/баш

экспортировать PATH=(ваш_$PATH)

    erg = `launchctl список | пример grep | греп 78`
    если [$erg = '78']
    затем
        launchctl выгрузить /Library/LaunchDeamons/example.plist
        launchctl загрузить /Library/LaunchDeamons/example.plist
        # возможно также
        пример запуска launchctl
    фи
       

И если этот скрипт будет корректно выполняться в оболочке, поместите его в crontab.

пример записи cron:

* * * * * reload_example.sh (следите за правами доступа и новыми дерьмовыми параметрами безопасности)

Возможно, это полезный совет.

Другие вопросы по тегам