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.