sudo vim /Library/LaunchDaemons/com.xxx.plist
<?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.xxx</string>
<!-- 执行脚本和参数 -->
<key>ProgramArguments</key>
<array>
<string>/usr/local/xxx/start.sh</string>
<string>params</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<!-- 登录时自动运行 -->
<key>RunAtLoad</key>
<true/>
<!-- 如果需要保持常驻,可以加 KeepAlive -->
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/var/log/xxx.log</string>
<key>StandardErrorPath</key>
<string>/var/log/xxx.err</string>
</dict>
</plist>
sudo chown root:wheel /Library/LaunchDaemons/com.xxx.plist
sudo chmod 644 /Library/LaunchDaemons/com.xxx.plist
旧版本:
sudo launchctl unload /Library/LaunchDaemons/com.xxx.plist
sudo launchctl load /Library/LaunchDaemons/com.xxx.plist
新版本:
sudo launchctl bootout system /Library/LaunchDaemons/com.xxx.plist
sudo launchctl bootstrap system /Library/LaunchDaemons/com.xxx.plist
sudo launchctl kickstart -k system/com.xxx
sudo launchctl print system|grep -i xxx
sudo launchctl print system/com.xxx
sudo xattr /usr/local/xxx/xxx
sudo xattr -c /usr/local/xxx/xxx.sh
#!/bin/sh
SOURCE_DIR="$(cd "$(dirname "$0")" && pwd)"
#MacOS不允许LaunchDaemon启动后台孤儿进程,所以不能用nohup以后台方式启动进程
#nohup "${SOURCE_DIR}/xxx" -c ${SOURCE_DIR}/Client-${1}.json >> "${SOURCE_DIR}/nohup_c.out" 2>&1 &
exec "${SOURCE_DIR}/xxx" -c "${SOURCE_DIR}/Client-${1}.json"
xxx=服务名,如果plist内容发生变化,也需要重新launchctl unload/load