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.