0%

了解LaunchDaemons

快速:
launchctl load -w ~/Library/LaunchAgents/xxx

以下是网上找的做个备份 但是没有找到命名规则
1 简单介绍
使用plist文件(一种xml格式的文件,全称为property list)来定义, 放入几个指定的目录,
具体目录的位置决定了这个plist对应的是一个Agent还是一个Daemon,
Agent和Daemon的唯一区别是他们的存放位置,以及为谁服务,
Agent只为当前登录的用户服务, Daemon则是为root或者指定的用户服务。

1.1 目录位置说明
~/Library/LaunchAgents
/Library/LaunchAgents
/Library/LaunchDaemons
/System/Library/LaunchAgents
/System/Library/LaunchDaemons
一般情况下,不需要去动/System下的agents或者daemons。

1.2 plist文件简单说明
一般关注几项主要的配置即可:

Label - 标志名称
Program - 运行的程序是哪个
RunAtLoad - 是否在加载的同时启动

1
2
3
4
5
6
7
8
9
10
11
12
<?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.app</string>
<key>Program</key>
<string>/Users/Me/Scripts/cleanup.sh</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

以上是一个最简版的plist配置实例

2 操作
plist只是配置,要执行这些配置,需要使用launchctl命令, 它运行你罗列信息, 加载,卸载,启动和关闭agents或者daemons

2.1 获取信息
sudo launchctl list
返回结果类似于:

1230 - com.apple.speech.speechsynthesisd
353 - com.apple.security.cloudkeychainproxy3
255 - com.apple.secd

  •   0   com.apple.sbd
    

    第一列表示进程号,如果有在结果中罗列,但没有数字而只是一个横线,标志虽然已经loaded, 但没有运行;

第二列是上次退出的状态号(the last exit code), 0表示成功,正数表示错误退出, 负数表示收到信号后退出。

2.2 加载或者卸载(load / unload)
launchctl load ~/Library/LaunchAgents/com.example.app.plist
launchctl load -F ~/Library/LaunchAgents/com.example.app.plist // 如果被disabled的话, 强制启动
例如Jenkins:

Start Jenkins:
sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
Stop Jenkins:
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
2.3 启动或者停止(start/stop)
agents或者daemons可以加载但不启动,所以,事后可以单独启动或者关闭:

launchctl start com.example.app
launchctl stop com.example.app
3 References
Daemons and Agents - 手册, 太jm详细了,就是看着挺繁琐…
What is launchd? - 说明简单明了,较全面
Mac OS X: Launchd Is Cool

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!