文档: launchctl Man Page - macOS - SS64.com
主要命令:
加载(启用): launchctl load xxx.plist
取消加载(取消启用): launchctl unload xxx.plist
查看状态: launchctl list
(Status 不是0的话表示有问题)
Plist 文件配置
目录位置
Mac OS X 中支持放 plist 的目录如下:
• /Library/LaunchDaemons: 系统启动后就会执行
• /Library/LaunchAgents: 当用户登录系统后才会执行
• ~/Library/LaunchAgents: 用户自定义的 plist
• /System/Library/LaunchAgents: 由 Mac OS X 为用户定义的任务
• /System/Library/LaunchDaemons: 由 Mac OS X 定义的守护进程任务
一般放在 ~/Library/LaunchAgents
即可. (同目录还有一些其他程序的配置,可以参考使用)
指令
在 Plist 中,支持两种定时任务的设置:
- StartInterval:定义任务多长时间(单位,秒)执行一次
- StartCalendarInterval:这个配置类似在 crontab 中的配置,指定具体的执行日期、星期、每月、每日的各个时间点.
设置周期运行: StartInterval <integer>
单位秒.
使用:
<key>StartInterval</key>
<integer>60</integer>
设置定时运行: StartCalendarInterval <dictionary of integers or array of dictionary of integers>
使用:
<key>StartCalendarInterval</key>
<dict>
<!--在第几分钟会被执行 -->
<key>Minute</key>
<integer>00</integer>
<!-- 在第几个小时会被执行-->
<key>Hour</key>
<integer>22</integer>
</dict>
参考:
Minute <integer>
The minute on which this job will be run.
Hour <integer>
The hour on which this job will be run.
Day <integer>
The day on which this job will be run.
Weekday <integer>
The weekday on which this job will be run (0 and 7 are Sunday).
Month <integer>
The month on which this job will be run.
WatchPaths - 监控路径,当路径文件有变化是运行程序,也是数组
<key>WatchPaths</key>
<array>
<string>/Library/Preferences/SystemConfiguration</string>
</array>
创建配置
- 文件必须以plist结尾.
- 配置文件中引用的命令脚本的目录或者输出日志的目录均不可是用户私有目录:Apple 已将 ~/documents desktop 和 downloads 指定为私有目录。launchd 无法从它们执行脚本。 使用私有目录
launchctl list
查看状态会显示126.
创建com.enever615.ejectdisk.plist
,作用是每天早上自动推出timemachine备份磁盘,这样我就可以直接拔掉扩展坞带走电脑了,示例文件如下:
<?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>
<!--Plist 名称,必须唯一-->
<string>com.never615.ejectdisk</string>
<key>ProgramArguments</key>
<!-- 指定要运行的程序的名称,可以是一个程序或者是一段脚本 数组类型 -->
<array>
<string>sh</string>
<string>-c</string>
<string>shortcuts run 推出磁盘</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>00</integer>
<key>Hour</key>
<integer>06</integer>
</dict>
<key>StandardOutPath</key>
<string>/Users/never615/scripts/launchctl/logs/ejectdisk.log</string>
<key>StandardErrorPath</key>
<string>/Users/never615/scripts/launchctl/logs/ejectdisk.err</string>
</dict>
</plist>
shortcuts 是调用系统的快捷指令.
GUI
brew install --cask launchcontrol
可以安装launchctl的gui工具,但是他是付费软件,100多点,如果你配置遇到问题的话试用版也可以帮你分析检查出部分问题,或许对你有用.