Mac创建定时任务

96
齐滇大圣
2017.01.09 23:53* 字数 958

创建定时任务主要就是为了每天固定运行一下脚本之类的。比如cocoapods仓库每天总是有新的第三方库提交,那么pod update的时候就会更新master分支,所以我就需要每天定时更新master,省得到时候再去pull master。

launchctl 定时任务

一般最常用的就是launchctl这种定时方式了。它是通过plist配置的方式来实现定时任务的。

plist文件格式

上图就是一个简单的定时任务的plist文件。下面来简单说一下里面Key的意思。

  • Label(String)
    任务名称,建议和文件名一样

  • Program(String)
    要定时执行的脚本,绝对路径

  • ProgramArguments (Array)
    要定时执行的脚本和一些参数,绝对路径。如果上面的Program省略的话执行的就是ProgramArguments里的第一个元素。

  • StandardErrorPath(String)
    脚本执行错误时的输出日志,绝对路径

  • StandardOutPath(String)
    脚本输出的内容,绝对路径

  • StartCalendarInterval(Dictionary)
    脚本运行的时间。Minute, Hour, Day, Month, Weekday。

  • StartInterval(Number)
    间隔运行的时间,单位为秒。

  • Disabled(Boolean)
    是否不可用,默认为NO可用。

  • LimitLoadToSessionType(String)
    限制访问的类型。AQUA:一个GUI剂,即限制访问所有GUI服务。这个Key好像没什么用,可用不填。

  • RunAtLoad(Boolean)
    标识launchd在加载完该项服务之后立即启动路径指定的可执行文件。默认值为false。

  • KeepAlive(Boolean)
    这个key值是用来控制可执行文件是持续运行呢,还是满足具体条件之后再启动。默认值为false,也就是说满足具体条件之后才启动。当设置值为ture时,表明无条件的开启可执行文件,并使之保持在整个系统运行周期内。

plist文件放置处

  • ~/Library/LaunchAgents 由用户自己定义的任务项(推荐)
  • /Library/LaunchAgents 由管理员为用户定义的任务项
  • /Library/LaunchDaemons 由管理员定义的守护进程任务项
  • /System/Library/LaunchAgents 由Mac OS X为用户定义的任务项
  • /System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项

建议放在 ~/Library/LaunchAgents 下面。

下面再来理解几个基础概念:

/System/Library和/Library和~/Library目录的区别?

/System/Library目录是存放Apple自己开发的软件。
/Library目录是系统管理员存放的第三方软件。
~/Library/是用户自己存放的第三方软件。

LaunchDaemons和LaunchAgents的区别?

LaunchDaemons是用户未登陆前就启动的服务(守护进程)。
LaunchAgents是用户登陆后启动的服务(守护进程)。

launchctl 命令

添加: launchctl load /System/Library/LaunchAgents/com.test.plist
移除: launchctl unload /System/Library/LaunchAgents/com.test.plist
查看: launchctl list
立即执行任务:launchctl start com.aigo.launchctl.plist
停止执行任务:launchctl stop com.aigo.launchctl.plist

注意:

  1. 你所运行的脚本需要有权限才能执行:chmod a+x test.sh
  2. 要让任务生效,必须先load命令加载这个plist
  3. 如果任务被修改了,那么必须先unload,然后重新load
  4. start可以测试任务,这个是立即执行,不管时间到了没有
  5. 执行start和unload前,任务必须先load过,否则报错
  6. ProgramArguments内不能直接写命令,只能通过shell脚本来执行

launchctl的GUI工具

LaunchControl,用这个工具可以查看到所有的launchctl定时任务。并用GUI的方式进行修改执行等。

参考

OSX系统添加定时任务
Mac OSX的开机启动配置
Mac上,执行定时任务:launchctl

技术工具
Web note ad 1