launchd
是执行此操作的正确方法(crontab
在 Mac 上不推荐使用,而是支持launchd
)。您将创建一个 plist 文件,其中包含有关您的程序的信息(可执行名称、参数等),其中一部分将是(在浏览器中输入警告且未经测试):
<key>StartCalendarInterval</key>
<dictionary>
<key>Hour</key>
<integer>12</integer>
</dictionary>
<key>StartInterval</key>
<integer>7200</integer>
<key>LimitLoadToSessionType</key>
<string>Aqua</string>
<key>RunAtLoad</key>
<true/>
- 应该在第
StartCalendarInterval
12 小时(中午)开始运行您的程序。
- 应该每 2 小时运行一次程序(
StartInterval
= 7200 秒)
- 仅在
LimitLoadToSessionType
Aqua 会话开始时加载您的程序(用户实际登录到窗口服务器(因此如果用户登录,这将阻止加载ssh
)
RunAtLoad
告诉可执行文件在加载 plist 时运行。这与LimitLoadToSessionType
, 应该在用户登录时启动可执行文件。
这是可能的,StartInterval
并且StartCalendarInterval
是相互排斥的。如果是这种情况,您可以取出StartInterval
密钥并将StartCalendarInterval
内容更改为:
<key>StartCalendarInterval</key>
<array>
<dictionary>
<key>Hour</key>
<integer>0</integer>
</dictionary>
<dictionary>
<key>Hour</key>
<integer>2</integer>
</dictionary>
<dictionary>
<key>Hour</key>
<integer>4</integer>
</dictionary>
<dictionary>
<key>Hour</key>
<integer>6</integer>
</dictionary>
...
<dictionary>
<key>Hour</key>
<integer>12</integer>
</dictionary>
...
<dictionary>
<key>Hour</key>
<integer>22</integer>
</dictionary>
</array>
有关详细信息,请参阅man launchd.plist
。