mac 定时去执行某shell脚本

方法1

进入根目录
cd/
通过终端打开Finder的根目录
open/
touch test.sh
vim test.sh
点击esc键,然后输:wq来保存退出

linux应该都有crontab,没有的话可以安装一下:
brew install vixie-cron
brew install crontabs:
vixie-cron软件包是cron的主程序;
crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。

方法2:

使用苹果的Schedule jobs using launchd设置定时任务。需要写一个plist文件,描述任务的动作、间隔的时间、日志输出等参数。

我创建一个plist文件com.hanlingzhi.cron.meican.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>Disabled</key>
    <false/>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>com.caoyujiao.crib.meican</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/php</string>
        <string>/Users/caoyujiao/Desktop/IQIYI/tvOS/my.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/Users/caoyujiao/Desktop/IQIYI/tvOS/stderr</string>
    <key>StandardOutPath</key>
    <string>/Users/caoyujiao/Desktop/IQIYI/tvOS/stdout</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>0</integer>
        <key>Minute</key>
        <integer>1</integer>
    </dict>
</dict>
</plist>

然后将plist文件放在/Users/hanlingzhi/Library/LaunchAgents,你的用户目录下,然后执行launchctl load plist就可以启动了。

launchctl load -w com.caoyujiao.crib.meican.plist 加载
launchctl unload -w com.caoyujiao.crib.meican.plist 卸载

  • 加载后,终端文案会在stdout文件中显示
  • 错误信息显示在stderr文件里面

plist脚本存放路径为/Library/LaunchDaemons或用户目录/Library/LaunchAgents,其区别是后一个路径的脚本当用户登陆系统后才会被执行,前一个只要系统启动了,哪怕用户不登陆系统也会被执行。

  • 系统定义了几个位置来存放任务列表

  • ~/Library/LaunchAgents 由用户自己定义的任务项

  • /Library/LaunchAgents 由管理员为用户定义的任务项

  • /Library/LaunchDaemons 由管理员定义的守护进程任务项

  • /System/Library/LaunchAgents 由Mac OS X为用户定义的任务项

  • /System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项

可以通过两种方式来设置脚本的执行时间。一个是使用StartInterval,它指定脚本每间隔多长时间(单位:秒)执行一次;另外一个使用StartCalendarInterval,它可以指定脚本在多少分钟、小时、天、星期几、月时间上执行,类似如crontab的中的设置。

launchctl的命令使用大家看一下帮助文档。

由于操作还是比较复杂,为了帮助快速执行,写了个shell快速拷贝新的plist并完成服务重启

总结一下

虽然plist的设置会复杂很多。但是当前在mac os还是倾向于推荐使用Plist的方法,crontab已不推荐使用。
两者的区别:
1、plist可以设置到秒,而crontab只能到分钟。

2、plist可以同时应用于Mac OS/Iphone。

3、plist对于MAC上系统交互的操作更支持(我就出现过用crontab设置,运行时出现execution error: 不允许用户交互。 (-1713)的错误)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 创建定时任务主要就是为了每天固定运行一下脚本之类的。比如cocoapods仓库每天总是有新的第三方库提交,那么po...
    齐滇大圣阅读 11,674评论 1 9
  • launchctl是一个统一的服务管理框架,可以启动、停止和管理守护进程、应用程序、进程和脚本等。launchct...
    繁著阅读 59,067评论 8 47
  • 摘要:今天做了个数据库的备份脚本,顺便系统得学习一下Linux下定时执行脚本的设置。Linux下的定时执行主要是使...
    暖夏未眠丶阅读 14,778评论 0 2
  • Mac下添加定时任务 编写任务脚本 把要执行的任务写好 编写任务描述文件 mac的任务描述文件是plist格式的。...
    Gundy_阅读 11,128评论 0 2
  • 时间可以让伤痕开除花朵 俄罗斯Ussuri乌苏里湾的玻璃海滩,曾经是旧苏联倾倒处理废弃啤酒瓶和瓷器的地方。但随着时...
    夜凉如水wp阅读 1,553评论 2 1