变更记录

序号 录入时间 录入人 备注
1 2015-03-23 Alfred Jiang -

方案名称

Mac 系统 - 启用定时自动执行任务

关键字

Mac 系统 \ MAC OS \ 定时执行 \ 自动执行

需求场景

  1. 需要 Mac 系统执行定时自动任务时

参考链接

  1. Mac OS X launchd plist StartInterval and StartCalendarInterval examples
  2. ITEYE - mac使用launchctl定时运行程序
  3. CSDN - Mac上,执行定时脚本:launchctl
  4. Apple documentation - launchd.plist

详细内容

1. 进入 root 模式,参考 Mac 系统 - 修改 Mac OS X root 密码
2. 编写自动执行脚本 sample.sh,并赋予执行权限

sh-3.2# cd /pathtoyoursh/
sh-3.2# vim sample.sh
sh-3.2# chmod 777 sample.sh

输入任意脚本内容,也可以在 sh 中调用 python 或 ruby 脚本

必须确保脚本是正确可执行的

3. 编写自动执行配置文件,并赋予执行权限

进入 LaunchDaemons ,该目录下脚本配置文件在用户未登录情况下依然能够自动执行

sh-3.2# cd /Library/LaunchDaemons/
sh-3.2# vim info.sample.code.plist

输入以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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>info.sample.code.plist</string>
<key>ProgramArguments</key>
<array>
<string>/pathtoyoursh/sample.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>0</integer>
<key>Hour</key>
<integer>18</integer>
</dict>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

以上内容表示系统在每天晚上 18:00 自动执行一次 /pathtoyoursh/sample.sh 脚本,更多脚本设置内容和格式见参考链接

必须确保所有路径为从根目录开始的绝对路径

可以通过以下命令检测 plist 格式是否正确

sh-3.2# plutil -lint info.sample.code.plist

设置权限

sh-3.2# chmod 600 info.sample.code.plist

3.启用服务

加载服务

sh-3.2# launchctl load info.sample.code.plist

卸载服务

sh-3.2# launchctl unload info.sample.code.plist

启动服务

sh-3.2# launchctl start info.sample.code.plist

关闭服务

sh-3.2# launchctl stop info.sample.code.plist

查看全部服务

sh-3.2# launchctl list

效果图

(无)

备注

(无)