Mac创建定时任务

作者: 齐滇大圣 | 来源:发表于2017-01-09 23:53 被阅读428次

    创建定时任务主要就是为了每天固定运行一下脚本之类的。比如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

    相关文章

      网友评论

      本文标题:Mac创建定时任务

      本文链接:https://www.haomeiwen.com/subject/cnxkbttx.html