在 Linux 中,通常我们会利用 service/systemctl 和 systemd 对话来运行服务 在 macOS 中, 与之对应的是launchctllaunchd。这是苹果自己弄的一套服务管理框架,最早出现在 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