Mac OS 中如何优雅的创建定时任务

Mac 中可以使用 crontab 一样的方式来使用定时任务。但是 crontab 来配置定时任务很容易出错。在 Mac 中,配置定时任务有更好的选择。

Mac 中有一个 launchctl 工具,这个工具是 Mac OS X 中用于启动进程的工具。Mac 中的各个进程都被配置成了 plist 文件。需要启动一个进行的时候只要执行以下命令:

launchctl load xxx.plist

停止一个进程只需要:

launchctl unload xxx.plist

Plist 文件配置

在 Mac 系统中,可以将需要处理的事情都写在 plist 文件中,plist 是一个 xml 格式的文件。plist 文件根据不同的需要可以放在不同的目录底下。Mac OS X 中支持放 plist 的目录如下:

  • /Library/LaunchDaemons: 系统启动后就会执行
  • /Library/LaunchAgents: 当用户登录系统后才会执行
  • ~/Library/LaunchAgents: 用户自定义的 plist
  • /System/Library/LaunchAgents: 由 Mac OS X 为用户定义的任务
  • /System/Library/LaunchDaemons: 由 Mac OS X 定义的守护进程任务

一个常见的 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>
        <!--Plist 名称,必须唯一--> 
        <key>Label</key>
        <string>cn.rayjun..plist</string> 
        <!-- 指定要运行的程序的名称,可以是一个程序或者是一段脚本 -->   
        <key>ProgramArguments</key>
        <array>
            <string>/path/to/programer</string> 
        </array>
        <!-- 执行时间的指定 --> 
        <key>StartCalendarInterval</key> 
        <dict> 
            <!--在第几分钟会被执行 -->
            <key>Minute</key>
            <integer>00</integer>
            <!-- 在第几个小时会被执行-->
            <key>Hour</key> 
            <integer>22</integer> 
        </dict>
        <!-- 运行日志 -->
        <key>StandardOutPath</key>
        <string>/path/to/log/x.log</string>
        <!-- 错误日志 -->
        <key>StandardErrorPath</key> 
        <string>/path/to/err/x.err</string>
    </dict> 
</plist>

plist 脚本编写完成后放入到相应的目录底下即可,然后执行一下 launchctl load xx.plist 就可以启动任务。

定时任务配置

在 Plist 中,支持两种定时任务的设置:

  • StartInterval:定义任务多长时间(单位,秒)执行一次
  • StartCalendarInterval:这个配置类似在 crontab 中的配置,指定具体的执行日期、星期、每月、每日的各个时间点,具体参照上面的配置文件。月份和天数的配置类似。

(完)

©2024 Rayjun    PowerBy Hexo