Múltiplos Wakes agendados no Mac OS X

2

Eu tenho um trabalho de crontab programado para ser executado a cada hora. Eu gosto de dormir e também gosto de dar ao meu macbook os mesmos privilégios. Infelizmente, o cron não é executado quando o sistema está adormecido. Existe uma maneira de fazer o seguinte:

a cada hora,

  1. Verifique se o computador já está dormindo.
  2. Se estiver dormindo, acorde o computador.
  3. Aguarde o trabalho do crontab terminar.
  4. Volte a dormir se o computador já estava dormindo.

Eu entendo que posso usar o pmset para agendar wake / sleep a cada hora, mas quero colocar seletivamente o computador de volta ao modo de suspensão (condicionado se ele estava ou não adormecido antes de começar a execução).

    
por Michael Wu 26.03.2013 / 23:09

1 resposta

1

O launchd executa trabalhos que foram agendados durante o sono (por StartCalendarInterval) depois de acordar. Você poderia voltar a dormir se o script for executado em um horário atrasado.

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 / test:

#!/bin/bash

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

chmod +x ~/Desktop/test , e execute launchctl load ~/Library/LaunchAgents/test.plist ou efetue o logout e retorne. Você precisa descarregar e carregar o plist para aplicar as alterações. Veja man launchd.plist para mais informações.

Se você acordar o computador manualmente às 7:59:55, ele poderá voltar a dormir.

    
por 29.03.2013 / 22:20