Mac 后台服务
Mac 的后台服务通过launchctl
工具实现(也可以使用linux下的crontab
),但官方建议使用launchctl
。
使用launchctl
非常简单,根据需要编写plist脚本即可。plist脚本存放路径为/Library/LaunchDaemons或/Library/LaunchAgents
,其区别是后一个路径的脚本当用户登陆系统后才会被执行,前一个只要系统启动了,哪怕用户不登陆系统也会被执行。
个人的plist
存放位置:
可以通过brew services list
查看
Name Status User Plist
elasticsearch stopped
mysql@5.7 started longxingjian /Users/longxingjian/Library/LaunchAgents/homebrew.mxcl.mysql@5.7.plist
redis started longxingjian /Users/longxingjian/Library/LaunchAgents/homebrew.mxcl.redis.plist
plist样例(redis服务)
<?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>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>Label</key>
<string>homebrew.mxcl.redis</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/redis/bin/redis-server</string>
<string>/usr/local/etc/redis.conf</string>
<string>--daemonize no</string>
</array>
<key>RunAtLoad</key>
<false/>
<key>WorkingDirectory</key>
<string>/usr/local/var</string>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/redis.log</string>
<key>StandardOutPath</key>
<string>/usr/local/var/log/redis.log</string>
</dict>
<
说明:
+
<key>RunAtLoad</key> <false/>
选项表示是否在系统加载的时候就启动服务,我将redis
服务在自己的机器上设置为否(因为我只做测试使用平时不需要redis
服务)。
+
<key>KeepAlive</key>
选项表示是否该服务是否一直运行
手动起停服务(以ssh服务为例)
开启ssh
服务
$ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
关闭ssh
服务
$ sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
常用命令
brew services list # 查看使用brew安装的服务列表
brew services run formula|--all # 启动服务(仅启动不注册)
brew services start formula|--all # 启动服务,并注册
brew services stop formula|--all # 停止服务,并取消注册
brew services restart formula|--all # 重启服务,并注册
brew services cleanup # 清除已卸载应用的无用的配置
配置文件目录
/Library/LaunchDaemons # 开机自启,需要sudo
~/Library/LaunchAgents # 用户登录后自启
Reference
使用brew services管理服务
Mac 开机自启动配置设置方法(定时任务解决方案)
Apple Developer官方文档:About Daemons and Services
TALK IS CHEAP, SHOW ME THE CODE