2014-10-29 2 views
2

У меня есть приложение, выполняемое как демон. Я поставил PLIST приложений под под /Library/LaunchDaemons на IOS 8 устройства и запустить его, выполнив командуКак ключ StartInterval влияет на запущенный демона

launchctl нагрузки /Library/LaunchDaemons/com.mycompany.testapp.plist

В моей панели laumchd Обратите внимание, что приложение работает как демон, выполнив команду

Я хочу, чтобы это приложение перезапускалось только после его сбоя или было убито. Если я намеренно выхожу из него с кодом 0, я не хочу, чтобы он перезапускался. Я пробовал настройку ниже. Это работает на прошивке 7, но не работает на прошивке 8.

<key>KeepAlive</key> 
<dict> 
    <key>SuccessfulExit</key> 
    <true/> 
</dict> 

Таким образом, я попытался добавить еще один ключевой StartInterval который установлен статусом .

<key>StartInterval</key> 
<integer>10</integer> 

Я протестировал этот сценарий путем выхода с кодом 0 и убил мое приложение командой kill -9 [PID]. Этот ключ заставляет мое приложение запускаться снова через 10 секунд после его уничтожения. Тем не менее, я беспокоюсь о результате этого ключа во время работы моего приложения.

Этот ключ влияет на запущенное и запущенное приложение. Я отслеживал журнал, кажется, что ключ StartInterval ничего не делает с работающим демоном. Однако я совершенно не уверен в этом. Не могли бы вы объяснить больше информации об этом? Большое спасибо.

ответ

0

Использовать false с ключом SuccessfulExit.

SuccessfulExit Если это правда, то работа будет возобновлена ​​до тех пор, выхода из программы и со статусом выхода ноль. Если false, задание будет перезапущено в обратном состоянии. Этот ключ подразумевает, что для параметра «RunAtLoad» установлено значение true, поскольку задание должно выполняться как минимум один раз, прежде чем мы сможем получить статус выхода.

1

Согласно этой ссылке http://pitaya.ch/documentation/iOS8_0APIDiffs.html все следы запуска в заголовках исчезли. (поиск /usr/include/launch.h, так что вы видите, что он был удален) Кажется, что переехал в новый libxpc в качестве базы для launchd (см. последний слайд в http://technologeeks.com/docs/launchd.pdf).

Похоже, они изменили launchd поведение прошивки 8. Из собственного LaunchDaemons компании Apple (находится под /System/Library/LaunchDaemons/) некоторые из них также имеет KeepAlive -property в формате словарь. Если вы их убьете, они мгновенно возрождаются на launchd.

Но после некоторых испытаний единственный способ иметь KeepAlive -property работу, чтобы добавить или добавить LaunchEvents (см слайд 21FF в http://technologeeks.com/docs/launchd.pdf) и/или MachServices к PLIST или изменить KeepAlive -property на:

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

Но тогда нет НИКАКОГО способа убить своего деамона без запуска, чтобы его не возродить, кроме выполнения launchctl unload /Library/LaunchDaemons/com.mycompany.testapp.plist.

Мой рабочий 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>Program</key> 
    <string>/path/to/your/daemon</string> 
    <key>RunAtLoad</key> 
    <true/> 
    <key>Label</key> 
    <string>com.mycompany.testapp</string> 
    <key>EnablePressuredExit</key> 
    <false/> 
    <key>UserName</key> 
    <string>root</string> 
    <key>JetsamProperties</key> 
    <dict> 
     <key>JetsamPriority</key> 
     <integer>-49</integer> 
     <key>JetsamMemoryLimit</key> 
     <integer>10000</integer> 
    </dict> 
    <key>POSIXSpawnType</key> 
    <string>Adaptive</string> 
    <key>Disabled</key> 
    <false/> 
    <key>ThrottleInterval</key> 
    <integer>5</integer> 
    <key>KeepAlive</key> 
    <dict> 
     <key>SuccessfulExit</key> 
     <false/> 
     <key>Crashed</key> 
     <true/> 
    </dict> 
    <key>MachServices</key> 
    <dict> 
     <key> com.mycompany.testapp.someMachService</key> 
     <true/> 
    </dict> 
    <key>EnableTransactions</key> 
    <false/> 
    <key>LaunchEvents</key> 
    <dict> 
     <key>com.apple.notifyd.matching</key> 
     <dict> 
      <key>SignificantTimeChangeNotification</key> 
      <dict> 
       <key>Notification</key> 
       <string>SignificantTimeChangeNotification</string> 
      </dict> 
      <key>SomeMoreNotifications</key> 
      [...] 
     </dict> 
    </dict> 
</dict> 
</plist> 

О StartInterval -свойстве: Даже Apple имеет это свойство в дополнении к KeepAlive -свойству для некоторых важных демонов (например, com.apple.locationd), и они, кажется, работают нормально. Поэтому я не думаю, что вам нужно беспокоиться ...

Смежные вопросы