在 Linux 中,通常我们会利用 service/systemctl 和 systemd 对话来运行服务 在 macOS 中, 与之对应的是launchctl
和launchd
。这是苹果自己弄的一套服务管理框架,最早出现在 MacOS X Tiger中。它利用的是 plist(property list)XML。
Launchd 定义的服务有两种,一种叫做 Daemons,一种叫做 Agents。 两者之间的区别并不大,主要是 Agents 一定是当前登陆的用户的角色来运行的,而 Daemon 则可以是 root 用户,或者任意指定的用户。 也就是说,Agents,是只给当前用户跑的服务,Daemons 更像是系统服务。
<?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>
launchctl load -w ~/Library/LaunchAgents/{$脚本名称}.plist
launchctl start com.example.app
launchctl stop com.example.app