如何设置任务在特定时间运行

如何设置任务在特定时间运行

这个问题的部分答案在这里:https://stackoverflow.com/q/132955/6260775

我正在寻找一种解决方案,以解决事件以固定时间间隔运行的特定情况,例如 10:00、10:30、11:00、11:30 等,并且希望避免在 CalendarEvents 中安排每个单独的事件。当我们想要每 10 分钟运行一次时,可能会变得非常混乱。

当使用 StartInterval 的值(例如 1800)时,事件将随时间变化,具体取决于任务完成所需的时间。因此,在某些时候,我们将无法确定任务何时准确运行。

答案1

StartCalendarInterval允许定义类似于的运行计划cron

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">
<dict>
     <key>Label</key>
     <string>com.example.exampled</string>

     <key>Program</key>
     <string>/path/tp/exampled</string>

     <key>ProgramArguments</key>
     <array>
          <string>exampled</string>
          <string>argv1</string>
          <string>argv2</string>
     </array>

     <key>StartCalendarInterval</key>
     <array>

         <dict>
             <key>Minute</key>
             <integer>0</integer>
         </dict>

         <dict>
             <key>Minute</key>
             <integer>30</integer>
         </dict>

     </array>
</dict>
</plist>

每当当前时间的分钟部分为0或时,上述任务就会运行30

引用手册页(man launchd.plist):

StartCalendarInterval <整数字典或整数字典数组>

此可选键使作业按指定的日历间隔启动。缺少的参数被视为通配符。语义类似于crontab(5)指定触发日期的方式。可以在数组中指定多个字典,以安排多个日历间隔。

与 cron 在计算机睡眠时跳过作业调用不同,launchd 将在计算机下次唤醒时启动作业。如果在计算机唤醒之前发生多个间隔,则这些事件将在计算机从睡眠状态唤醒时合并为一个事件。

注意开始间隔开始日历间隔彼此之间并不知道对方的存在。系统对它们进行完全独立的评估。

     Minute <integer>
     The minute (0-59) on which this job will be run.

     Hour <integer>
     The hour (0-23) on which this job will be run.

     Day <integer>
     The day of the month (1-31) on which this job will be run.

     Weekday <integer>
     The weekday on which this job will be run (0 and 7 are Sunday). 
     If both Day and Weekday are specificed, then the job will be 
     started if either one matches the current date.

     Month <integer>
     The month (1-12) on which this job will be run.

相关内容