Pages

Monday, 2 April 2018

用于演示如何使用KeepAlive的launchd的Mac OS X的plist文件


  • at.obdev.LittleSnitchUIAgent.plist (https://github.com/tjluoma/launchd-keepalive/blob/master/at.obdev.LittleSnitchUIAgent.plist)是基本的'keepalive' plist文件的示范。
请注意
 <key>KeepAlive</key>
 <true/>
 <key>RunAtLoad</key>
 <true/>
这些命令将告诉 launchd 只要用户登录就运行 ProgramArguments 中列出的程序,并且只要用户登录,就保持运行,不管什么情况下都是如此:
 <?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>KeepAlive</key>
 <true/>
 <key>Label</key>
 <string>at.obdev.LittleSnitchUIAgent</string>
 <key>ProgramArguments</key>
 <array>
 <string>/Library/Little Snitch/Little Snitch Agent.app/Contents/MacOS/Little Snitch Agent</string>
 </array>
 <key>RunAtLoad</key>
 <true/>
 </dict>
 </plist>
如果 Little Snitch Agent 因任何原因而终止( 例如 崩溃或者 kill ) 将自动重新启动。
首先,你可以能会尝试创建几个 plists,以便保持所有最喜欢的应用程序处于运行中。
不要那样做。
想想如果你指定了 KeepAlive的应用需要更新,会发生什么。 会发生什么应用告诉你它有更新,你下载它,应用退出,然后 --,它重新启动。 是否有机会完成更新? 您确定吗?
偶尔,KeepAlive 应用程序可能会干扰重启或者注销。
在大多数情况下,更好的解决方案是将 KeepAlive 与 SuccessfulExit 一起使用。

KeepAlive KeepAlive和- SuccessfulExit

例如 演示如何创建一个plist以保持应用程序运行所有时间,除非它cleanly退出( 例如 。 用户告诉它退出) 。 如果应用退出"成功"( 技术上是 0 ),它使用 KeepAlive,但是如果应用退出,那么应用程序不会自动重启。 但是,如果应用程序崩溃( 退出代码不等于 0 ),那么它将自动重启。 下面是 launchd 代码的相关部分:
 <key>KeepAlive</key>
 <dict>
 <key>SuccessfulExit</key>
 <false/>
 </dict>
如果你有一个应用程序有时会有故障,特别是在应用程序是在后台运行的或者菜单栏。

KeepAlive 和 NetworkState

另一个选项是 KeepAlive 和 NetworkState,如 com.tjluoma.keeprunning.mail.plist,它告诉 Mail.app,只要我们有一个网络连接,就可以一直运行。
下面是专门处理"网络是向上的"部分的plist部分:?
 <key>KeepAlive</key>
 <dict>
 <key>NetworkState</key>
 <true/>
 </dict>
注意:如果你有IP地址,则 #1:launchd 认为"网络"为"向上"。 但是,你的本地网络可能已经启动,但你与互联网的连接已经关闭。 比如现在我的ISP离线了,但是我连接到本地的Wi-Fi 网络,所以,只要关心 launchd,"网络"就启动了。 记住"网络已经启动"并不一定意味着"互联网是up的。"
注意:重要的笔记 #2: 记住 launchd 不会因为网络连接中断而退出。 只有在应用程序退出时才使用 KeepAlive,此时,launchd 将检查并表示"网络是向上的",如果回答是,它就会重新启动应用程序。 如果答案是否定的,它将不会重新启动应用程序。

安装

除非另外说明,plists应该放在"$HOME/Library/LaunchAgents" ( 位置"$home中"代表你的主目录的路径,例如: /Users/sjobs/Library/LaunchAgents/

:如何启动新的launchd plist

默认情况下,launchd 将在你登录时从"$HOME/Library/LaunchAgents" 加载'. plist'文件。 如果你想启动一个新的. plist,,你必须告诉 launchd 加载它。 要执行这里操作,请启动 Terminal.app 并键入:
 cd"$HOME/Library/LaunchAgents"
然后:
 launchctl load com.tjluoma.keeprunning.mail.plist
( 将'。tjluoma 。keepRunning 。mail 。plist'更改为你想要加载的plist的文件名)

如何告诉 launchd 已经更改现有的plist?

如果已经更改现有的agavi并希望立即识别更改,则必须卸载它,然后重新加载它:
 cd"$HOME/Library/LaunchAgents"
 launchctl unload com.tjluoma.keeprunning.mail.plist
 launchctl load com.tjluoma.keeprunning.mail.plist

如何卸载/删除 plist

同样,在 Terminal.app, 中:
 cd"$HOME/Library/LaunchAgents"
 launchctl unload com.tjluoma.keeprunning.mail.plist
然后把它移到废纸篓里:
 mv com.tjluoma.keeprunning.mail.plist ~/.Trash/
或者删除它:
 rm -i com.tjluoma.keeprunning.mail.plist
来自https://www.helplib.com/GitHub/article_106569
翻译自https://github.com/tjluoma/launchd-keepalive

No comments:

Post a Comment