在Linux上创建服务一般是用systemd,mac上的对标则是launchd,在这里以kcptun服务为例,简单记录一下它的用法。
我们kcptun这个服务为例,它的启动命令如下:
1
| client_darwin_arm64 -c client.json
|
首先我们看看在linux上配置的kcptun.service
,配置文件/etc/systemd/system/kcptun.service
如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| [Unit]
Description=kcptun
Wants=network.target
After=syslog.target network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/kcptun/client_linux_amd64 -c /usr/local/share/kcptun/client.json
Restart=on-failure
RestartSec=10
KillMode=process
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
|
核心要素就两个,一个是ExecStart
,表示服务要执行的命令,一个是Restart
,表示服务的重启策略,90%的服务都只需要关注这两项。
在macOS上,与.service
文件类似,服务配置文件为.plist
后缀,格式为xml,一般来说,命名为com.<service_name>.plist
,但是不做严格要求。以下为com.kcptun.plist
文件,我们只需要用户态的服务,所以放在~/Library/LaunchAgents/
目录下即可:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <?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.me.kcptun</string>
<key>ProgramArguments</key>
<array>
<string>/Users/me/kcptun/client_darwin_arm64</string>
<string>-c</string>
<string>/Users/me/kcptun/client.json</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/kcptun.log</string>
<key>StandardErrorPath</key>
<string>/tmp/kcptun.log</string>
</dict>
</plist>
|
ExecStart
转化为了ProgramArguments
,Restart
对应KeepAlive
。
更多额外配置可以参考这个网站