Un semplice tutorial Launchd
Supponiamo di aver scritto un piccolo script che si desidera eseguire ogni tanto. Se stai usando un Mac, allora launchd
è uno strumento perfetto da usare.
È meglio di crontab
perché, tra le altre cose, se il computer è spento quando è pianificata l’esecuzione del programma, launchd
eseguirà il programma non appena il computer si sveglia. Nel frattempo crontab
non lo farà.
La prima cosa da fare è creare uno script da eseguire. Ho intenzione di scrivere un semplice Nodo.js ma puoi usare quello che vuoi.
touch ~/demo/main.js
Per il bene di questo esempio, tutto questo script sta per fare è registrare l’ora in cui è stato eseguito.
console.log("Hello", Date.now())
Ora dobbiamo creare un file plist di configurazione launchd
.
touch ~/Library/LaunchAgents/com.demo.daemon.plist
Un file plist è solo il formato XML personalizzato di Apple per le configurazioni. Incolla questo codice. Potrebbe essere necessario modificare /Users/chet/demo
nella directory che si sta utilizzando per questo esempio.
Questo file specifica alcune cose:
- Il demone verrà avviato ogni volta che l’utente accede.
- Verrà eseguito ogni 20 secondi.
- Emetterà alcuni file di log (molto utili per il debug).
- Imposterà il percorso dell’ambiente (utile se il tuo programma usa altri comandi da
usr/local/bin
). - Il comando verrà eseguito nella directory
/Users/chet/demo
. - E il comando è
/usr/local/bin/node main.js
.
Ci sono un sacco di altre opzioni che puoi leggere qui. Un’opzione comunemente usata è l’opzione KeepAlive
che riavvierà lo script ogni volta che termina o si blocca. Questo è utile se vuoi che il tuo script sia sempre in esecuzione.
Ora, abbiamo solo bisogno di farlo funzionare. Innanzitutto, apri Console.app
. Potresti non averlo mai usato prima, ma è un’app di utilità nativa per il debug di questo genere di cose. Nel sistema.sezione log, è possibile cercare com.demo.daemon
per vedere se ci sono errori di sistema quando si tenta di avviare launchd
.
Torna nel tuo terminale, esegui il seguente comando.
launchctl load ~/Library/LaunchAgents/com.demo.daemon.plist
Se vedi alcuni errori nel Console.app
puoi fermare il demone con unload
e cercare errori nel file stderr.log
.
launchctl unload ~/Library/LaunchAgents/com.demo.daemon.plist
cat ~/demo/stderr.log
Se tutto è andato bene, non dovresti vedere nulla nel Console.app
e dovresti vedere i log che arrivano al file ~/demo/stdout.log
ogni 20 secondi.