macOS 的守护程序和服务
Daemons and Services in macOS
基础知识
- 守护程序: launchd。类似 Linux 中的 systemd,负责初始化、加载、启/停和管理系统服务。
- 管理命令:
launchctl
。 类似 Linux 中的systemctl
- 配置文件类型是 .plist。存放路径:
/Library/LaunchDaemons/
,无论是否有任何用户登录系统,它们都应运行。 它们将以“root”权限启动。/Library/LaunchAgents
,任意用户登录后~/Library/LaunchAgents/
,某(当前)用户登录后其中
~
是您的主目录。 这些任务将使用您的权限运行,就像您自己通过命令行或双击 Finder 中的文件启动它们一样。
添加和删除一个服务的流程
-
编辑 .plist 配置文件
可参考 官方文档 或下文的“常用配置”章节。 -
复制配置文件到规定路径
文件名称规范和路径示例:/Library/LaunchDaemons/com.name.Name.plist
-
为配置文件添加权限
sudo chown -R root:wheel /Library/LaunchDaemons/com.name.Name.plist
-
手动加载服务
sudo launchctl load /Library/LaunchDaemons/com.name.Name.plist
-
手动启动/停止服务
sudo launchctl start com.example.run_task
sudo launchctl stop com.example.run_task
-
检查运行情况
查看配置情况:launchctl print system/com.name.Name
查看服务是否正常正在运行。注意:如果定期执行的程序已关闭,这里不会显示。
launchctl list | grep 'com.name.Name.plist'
或launchctl blame system/com.name.Name
如果配置文件中设置了日志文件。可通过日志文件查看 stdout 输出,以便于 debug。
-
手动卸载服务
sudo launchctl unload /Library/LaunchDaemons/com.name.Name.plist
-
删除掉配置文件
常用配置
运行一个脚本文件
<key>ProgramArguments</key>
<array>
<string>/Users/Name/Documents/script.sh</string>
</array>
定期执行-间隔n秒:
<key>StartInterval</key>
<integer>300</integer>
300 seconds
定期执行-根据日历规则指定时间:
Like the Unix cron subsystem
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>45</integer>
<key>Hour</key>
<integer>13</integer>
<key>Day</key>
<integer>7</integer>
</dict>
starts the job on the 7th day of every month at 13:45 (1:45 pm).
持续运行
<key>KeepAlive</key>
<true/>
监测路径变动:
<key>WatchPaths</key>
<array>
<string>/etc/hostconfig</string>
</array>
参考文章: