2

У меня задание crontab запланировано на каждый час. Мне нравится спать, и я также наслаждаюсь предоставлением моему MacBook тех же привилегий. К сожалению, cron не запускается, когда система спит. Есть ли способ сделать следующее:

Каждый час,

  1. Убедитесь, что компьютер уже спит.
  2. Если спишь, проснись компьютер.
  3. Дождитесь окончания работы crontab.
  4. Вернитесь спать, если компьютер ранее спал.

Я понимаю, что могу использовать pmset для составления расписания пробуждения / сна на каждый час, но я хочу выборочно перевести компьютер в спящий режим (в зависимости от того, спал он или нет до запуска процедуры пробуждения).

1 ответ1

1

launchd запускает задания, которые были запланированы во время сна (с помощью StartCalendarInterval) после пробуждения. Вы можете вернуться в режим сна, если скрипт запускается с задержкой.

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

~/Library/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>

~/Desktop/ тест:

#!/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 или выйдите и снова войдите в систему. Вы должны выгрузить и загрузить список, чтобы применить изменения. Смотрите man launchd.plist для получения дополнительной информации.

Если вы разбудите компьютер вручную в 7:59:55, он может снова заснуть.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .