Mac OS X 上的多个计划唤醒

Mac OS X 上的多个计划唤醒

我有一个 crontab 作业计划每小时运行一次。我喜欢睡觉,也喜欢给我的 MacBook 同样的权限。不幸的是,当系统处于睡眠状态时,cron 不会执行。有没有办法执行以下操作:

每隔一小时,

  1. 检查计算机是否已处于睡眠状态。
  2. 如果处于睡眠状态,则唤醒计算机。
  3. 等待 crontab 作业完成。
  4. 如果计算机之前处于睡眠状态,则返回睡眠状态。

我知道我可以使用 pmset 来安排每小时的唤醒/睡眠,但我想有选择地让计算机重新进入睡眠状态(取决于在唤醒例程开始运行之前它是否处于睡眠状态)。

答案1

launchd 在唤醒后运行在睡眠期间(按 StartCalendarInterval)安排的作业。如果脚本在延迟时间运行,您可以重新进入睡眠状态。

for h in {0..23}; do sudo pmset repeat wake MTWTFSS $h:00:00; done

〜/库/LaunchAgents/test.plist:

<?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>test</string>
    <key>Program</key>
    <string>/Users/username/Desktop/test</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Minute</key>
        <integer>59</integer>
    </dict>
</dict>
</plist>

〜/桌面/测试:

#!/bin/bash

say a
[[ $(date +%-M) -lt 10 ]] && osascript -e 'tell app "System Events" to sleep'

chmod +x ~/Desktop/test,然后运行launchctl load ~/Library/LaunchAgents/test.plist或注销并重新登录。您必须卸载并加载 plist 才能应用更改。man launchd.plist有关更多信息,请参阅。

如果您在 7:59:55 手动唤醒计算机,它可能会重新进入睡眠状态。

相关内容