launchd 是否应该拾取“错过的”事件?

launchd 是否应该拾取“错过的”事件?

我读到,如果在要发生 launchd 事件时计算机处于睡眠状态,那么 launchd 将在计算机唤醒时运行该事件。

我的问题是关于关闭的计算机。如果在要发生 launchd 事件时计算机已关闭,launchd 是否应该在下次开机时运行该事件?

我之所以问这个问题,是因为我已经创建了一个事件(代理?)每天上午 09:45 运行。但通常那时机器是关机的。打开电脑后,我没有看到事件的输出(正在发送电子邮件)。所以我试图缩小范围,看看这是设计行为还是我搞砸了什么。

答案1

它仅限于在睡眠期间(而不是关机时)和通过 StartCalendarInterval 参数(而不是 StartInterval)安排的作业。

守护进程和服务编程指南:调度定时作业

launchd如果您通过设置密钥来安排作业StartCalendarInterval,并且计算机在作业应该运行时处于休眠状态,则您的作业将在计算机唤醒时运行。但是,如果机器在作业应该运行时处于关闭状态,则作业直到下一个指定时间才会执行。

launchd当计算机关闭或睡眠时,所有其他作业都会被跳过;它们将不会运行,直到下一个指定时间到来。

答案2

该事件失败可能是因为它在 Internet 连接完全建立之前运行。

以下是文章中的一些信息使用 launchd 来安排作业

如果你的电脑经常处于睡眠状态,那么当需要运行作业时,它就会处于睡眠状态,这意味着它会在醒来时立即运行作业,可能在连接到互联网之前。我曾尝试过活着网络状态让任务重复执行,直到网络连接正常。你也可以使用成功退出编写脚本,使其仅返回非零代码,表示“10 秒后再次运行”。当您没有互联网连接时,这两种方法都会使脚本每 10 秒运行一次(并且可能失败)。更好的想法是在脚本开始时休眠 5 秒。或者您可以将运行频率加倍并希望获得最佳效果。

相关内容