O launchd deveria pegar eventos "perdidos"?

4

Eu li que, se o computador estiver dormindo quando um evento launchd ocorrer, o launchd executará o evento quando o computador for ativado.

Minha pergunta é em relação a um computador que está desligado. Se a máquina estiver desligada quando um evento launchd estiver ocorrendo, o launchd deverá executá-lo na próxima inicialização?

Eu pergunto porque eu criei um evento (agente?) para ser executado às 09:45 da manhã todos os dias. Mas muitas vezes a máquina é desligada nesse momento. Eu não estou vendo a saída do evento (um email sendo enviado) depois de ligar o computador. Então, eu estou tentando diminuir se isso é comportamento por design ou se eu estraguei algo.

    
por Sam Axe 28.01.2013 / 01:21

2 respostas

2

Ele é limitado a tarefas que foram agendadas durante a suspensão (não quando desligadas) e por um parâmetro StartCalendarInterval (não ao StartInterval).

Daemons e serviços Guia de programação: Agendando trabalhos programados

If you schedule a launchd job by setting the StartCalendarInterval key and the computer is asleep when the job should have run, your job will run when the computer wakes up. However, if the machine is off when the job should have run, the job does not execute until the next designated time occurs.

All other launchd jobs are skipped when the computer is turned off or asleep; they will not run until the next designated time occurs.

    
por 04.02.2013 / 14:05
1

Pode ser que o evento falhe porque é executado antes que a conectividade com a Internet seja totalmente estabelecida.

Aqui estão algumas informações do artigo Agendar trabalhos usando o launchd :

If your computer sleeps often, it will be asleep when jobs should run, which means it will run them right when it wakes up, possibly before it connects to the internet. I have experimented with KeepAlive and NetworkState to get a job to repeat itself until there is a network connection. You could also use SuccessfulExit write the script so that it only returns a nonzero code to mean “run again in 10 seconds.” Either method would have the script running (and presumably failing) every 10 seconds when you have no internet connection. A better idea would be to just sleep 5 seconds at the beginning of your script. Or you could double the run frequency and hope for the best.

    
por 04.02.2013 / 08:01