mac 使用 launchctl
来管理守护进程,类似于 systemd
,服务的配置文件使用 plist
。
1. 制作服务配置文件
plist
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<?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.adevjoe.Demo</string>
<key>ProgramArguments</key>
<array>
<string>/Users/joe/path/to/app</string>
<string>--arg</string>
<string>xxx</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/joe/com.adevjoe.Demo.err</string>
<key>StandardOutPath</key>
<string>/Users/joe/com.adevjoe.Demo.out</string>
</dict>
</plist>
|
ProgramArguments: 可以设置服务的二进制目录和参数
plist 目录:
~/Library/LaunchAgents # 用户的进程
/Library/LaunchAgents # 管理员设置的用户进程
/Library/LaunchDaemons # 管理员提供的系统守护进程
/System/Library/LaunchAgents # Mac操作系统提供的用户进程
/System/Library/LaunchDaemons # Mac操作系统提供的系统守护进程
我们把配置好的 plist 文件放在 ~/Library/LaunchAgents
目录即可。
2. 启动服务
1
|
launchctl load ~/Library/LaunchAgents/com.adevjoe.Demo.plist
|
启动后如果正常则不会有输出,也不会有错误信号。可以使用 launchctl list | grep xxx
来检测服务是否加载并启动。
3. 停止服务
1
2
3
4
5
|
# 停止服务,但服务还是会在下次重新登录或启动后运行
launchctl unload ~/Library/LaunchAgents/com.adevjoe.Demo.plist
# 停止并禁用服务,服务不会在下次重新登录或启动后运行
launchctl unload -w ~/Library/LaunchAgents/com.adevjoe.Demo.plist
|