在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转化为了ProgramArgumentsRestart对应KeepAlive

更多额外配置可以参考这个网站