crontab 将 osx 从睡眠中唤醒

Nip*_*rus 29 script cron macos

我有一个 crontab,它将在清晨(在我入睡后)启动某个程序,并在早上晚些时候(在我醒来之前)再次关闭它。但是我的 iMac 在睡眠时不会执行 crontab 脚本。

我看到有一些偏好可以唤醒机器并使其在指定时间再次休眠,但是有没有办法使用 crontab 来做到这一点?

jtb*_*jtb 42

cron在计算机休眠时不会执行,因此您无法使用 crontab 条目来唤醒计算机。也就是说,您可以在 Preferences >> Energy Saver >> Schedule 中安排计算机在执行 cron 任务前一两分钟唤醒。

还值得指出的是,自 Tiger 以来,Apple 已将大部分预定作业cron和脚本之类的工作init.rc转移到launchd流程中。它提供了更详细(但我认为很麻烦)的控制方式(通过几个 plist 文件)。它还会自动运行由于计算机在唤醒时处于睡眠状态而错过的任务。看看 Apple 的Scheduling Timed Jobs页面。

  • 很好的答案,但是当笔记本电脑关闭时你能唤醒它吗? (2认同)

Lri*_*Lri 7

另一种安排从睡眠中醒来的方法是使用 pmset:

sudo pmset repeat wakeorpoweron MTWRFSU 03:45:00
Run Code Online (Sandbox Code Playgroud)

launchd 无法将计算机从睡眠中唤醒,但它会在唤醒后运行在睡眠期间安排的作业。如果其他人搜索如何做到这一点,例如,您可以将此 plist 保存为~/Library/LaunchAgents/some.label.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>
  <key>Label</key>
  <string>some.label</string>
  <key>ProgramArguments</key>
  <array>
    <string>say</string>
    <string>a</string>
  </array>
  <key>StartCalendarInterval</key>
  <dict>
    <key>Hour</key>
    <integer>23</integer>
    <key>Minute</key>
    <integer>59</integer>
  </dict>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

然后运行launchctl load ~/Library/LaunchAgents/some.label.plist