Mac设置开机启动项
由于最近使用到开机自启动以及定时任务的开启,在采坑的同事记录一下Mac自启动的以及定时任务开启的正确姿势
Mac 开机自启动以及定时任务设置方式
- 使用登录项添加可执行的脚本(此处不做介绍,注意添加可执行权限即可(chmod 777 ..sh))
- launchctl加载plist文件
- crontab添加可执行文件以及脚本
launchctl加载plist文件
Mac开机启动大部分会使用launchctl加载文件,launchctl 通过 plist 属性列表(Property List)配置。
plist文件位置以及相关权限
1 2 3 4 5
| ~/Library/LaunchAgents 由用户自己定义的任务项 /Library/LaunchAgents 由管理员为用户定义的任务项 /Library/LaunchDaemons 由管理员定义的守护进程任务项 /System/Library/LaunchAgents 由Mac OS X为用户定义的任务项 /System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项
|
LaunchDaemons和LaunchAgents的区别?
1 2
| LaunchDaemons是用户未登陆前就启动的服务,即开机即可启动 LaunchAgents使用户登陆后启动的服务
|
具体plist设置苹果官方教材,以下示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <?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>cn.GY.tasklogout</string> <key>ProgramArguments</key> <array> <string>/Applications/ATSign.app/Contents/MacOS/ATSign</string> </array> <key>StartCalendarInterval</key> <dict> <key>Minute</key> <integer>30</integer> <key>Hour</key> <integer>9</integer> <key>Day</key> <integer>1</integer> <key>Month</key> <integer>5</integer> <!-- 0和7都指星期天 --> <key>Weekday</key> <integer>0</integer> **<key>Minute</key> <string>01</string> <key>Hour</key> <string>18</string>** </dict> <key>RunAtLoad</key> <true/> </dict> </plist>
|
注意: 在–区间的设置时间点的plist的key,此处必须为integer,而非string,刚开始使用string会造成app一直无限自启动,后来查文档发现是integer,才解决了这个问题。
部分键值说明
- Label
服务的名称,不可重复,可与当前plist文件名一致
- Program
需要启动的程序(可不设置ProgramArguments)
- ProgramArguments
-startup开机启动
- StartCalendarInterval
此处设置具体时分秒以及工作日等相关信息的设置,注意key值类型相照应,如果不设置会默认任意时间点启动Mac通过launchctl加载plist的相关命令
- 检查plist语法是否正确
1
| plutil ~/Library/LaunchAgents/demo.plist
|
1
| launchctl load ~/Library/LaunchAgents/demo.plist
|
1
| launchctl unload ~/Library/LaunchAgents/demo.plist
|
1 2
| launchctl list 所有服务 launchctl list | grep demo 过滤后的服务
|
- 如果加载服务后,再次修改该服务plist文件,可通过取消当前配置在加载当前配置的方式修改服务
1 2
| launchctl unload launchctl load
|
crontab执行脚本文件等
编辑自定义自己的任务
1 2 3
| crontab -e 13 15 * * * /usr/local/bin/python2.7 /Users/macprohz/Desktop/Python/WebAppDemo/GY.py
|
添加编辑wq保存即可, 以上代表意义:在15:30分启动python脚本GY.py
时间格式
1 2
| * * * * * command 分 时 日 月 周 命令
|
第1列表示分钟1~59 每分钟用或者 /1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
5个表示每分钟
表示每分钟/时/日/月/周
/n表示每隔n分钟/时/日/月整/周
每个时间位多个数值用逗号隔开: * 0,1,2,3,4,5就表示除了周六以外的每一分钟
1 2 3 4 5 6 7
| “*”代表取值范围内的数字, “/”代表”每”, “-”代表从某个数字到某个数字, “,”分开几个离散的数字
|
crontab的一些终端命令
1 2 3 4
| ps aux | grep cron :查看服务是否已经运行用 crontab -e:编辑当前用户crontab任务,保存退出后自动加到crontab列表中执行 crontab -l :查看当前用户所有crontab 列表 crontab -r :删除当前用户所有crontab 列表
|
总结:此文仅为记录Mac下的启动方式,防止个人用到时又要无休止的goole,大部分资源还是很早之前的,特此记录(GiantForJade)。
参考文献
launchctl
crontab