Voglio automatizzare l'esecuzione di un lavoro di lunga durata. Dovrebbe essere lanciato una volta al giorno, ma solo se il precedente lavoro non è ancora in esecuzione. Posso farlo con launchd e come?
Voglio automatizzare l'esecuzione di un lavoro di lunga durata. Dovrebbe essere lanciato una volta al giorno, ma solo se il precedente lavoro non è ancora in esecuzione. Posso farlo con launchd e come?
Sì, launchd
garantisce di avere solo un'istanza dell '"agente" in esecuzione e lo fa automaticamente. Imposta normalmente il tuo lavoro utilizzando StartInterval per pianificare l'esecuzione del tuo lavoro in background e il sistema non avvierà una nuova istanza se l'istanza precedente non è stata completata entro il tempo in cui raggiunge l'intervallo di avvio pianificato.
Se passano più intervalli di pianificazione, launchd
eseguirà solo una nuova istanza all'intervallo successivo. È "intelligente" a riguardo.
Ecco un esempio di 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>com.mycompany.test</string>
<key>ProgramArguments</key>
<array>
<string>/some/path/to/a/script.sh</string>
</array>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>
Nell'esempio precedente, se /some/path/to/a/script.sh
impiega 361 secondi per essere eseguito, launchd
non avvierà 5 nuove istanze durante quel periodo di tempo e avvierà solo una nuova istanza al 420 ° secondo tempo nel tempo .
La formulazione su launchd.plist ( 5) la pagina man dice altrettanto, ma il modo in cui è scritta lo rende non ovvio:
StartInterval
This optional key causes the job to be started every N seconds. If the system is asleep, the job will be started the next time the computer wakes up. If multiple intervals transpire before the computer is woken, those events will be coalesced into one event upon wake from sleep.
L'ultima frase dice essenzialmente " launchd
rende i tuoi lavori singleton per te fintanto che seguire le regole per un buon comportamento del lavoro ".
Leggi altre domande sui tag automation cron launchd