2013-05-23 18 views
15

Ho configurato il launchd per avviare un comando alle 18:00 ogni giorno sul mio Mac Pro, ma non funzionava.Come verificare se launchd ha avviato lo script?

Voglio controllare se launchd ha eseguito il comando. Ho provato la console di sistema, non ho trovato nulla di valido.

la mia versione di Mac OS è Mac OS X 10.8.3

Il mio file plist:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>mytask</string> 
    <key>Program</key> 
    <string>/opt/local/bin/node</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/Users/xxx/My/task.js</string> 
    </array> 
    <key>StartCalendarInterval</key> 
    <dict> 
     <key>Hour</key> 
     <integer>18</integer> 
     <key>Minute</key> 
     <integer>0</integer> 
    </dict> 
    <key>StandardOutPath</key> 
    <string>/Users/xxx/launchd.stdout.log</string> 
    <key>StandardErrorPath</key> 
    <string>/Users/xxx/launchd.stderr.log</string> 
</dict> 
</plist> 
+0

Vorrei segnalare a quelli (come me) che non ha notato, ma l'eseguibile è completo '/ opt/local/bin/node'. Questo è probabilmente necessario perché launchd ha [diversa configurazione dell'ambiente] (https://discussions.apple.com/thread/3244126?tstart=0) rispetto a un utente, nonostante lo script sia eseguito [con l'account dell'utente] (https: //developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html#pageTitle). – Jeff

risposta

18

Hai definito StartCalendarInterval, in modo che il lavoro è stato eseguito quando è stato caricato e sarà eseguito tutti i giorni alle 18:00.

launchd Query (8) per scoprire il suo stato di uscita:

launchctl list | grep mytask 

questo restituirà una linea linea questo:

<pid> <status> mytask 

Quando pid è un numero, il lavoro è attualmente in esecuzione. Altrimenti dai un'occhiata a status, che è il codice di uscita del programma, nodo nel tuo caso. Un codice di uscita pari a 0 indica che il programma è stato completato correttamente o che non è ancora stato avviato. I numeri positivi vengono restituiti per errori di programma, mentre quelli negativi indicano che il lavoro è terminato a causa di un segnale.

Suppongo che il lavoro sia fallito. Si consiglia di verificare l'output/errore standard del programma. Specificare StandardOutPath e StandardErrorPath per farlo. Il contenuto di questi file probabilmente ti dirà perché il programma ha avuto esito negativo.

+0

Ho eseguito l'elenco launchctl e ottenuto lo stato 0. Aggiungo StandardOutPath e StandardErrorPath ai plist come sopra, ma non è stato trovato alcun file dopo aver eseguito l'attività con launchctl start. Quindi ritengo che il compito non sia ancora iniziato. – hywl51

+2

Assicurarsi di ricaricare la definizione del lavoro ('scarica', quindi' carica') dopo averlo modificato. La semplice modifica del file e l'emissione di un comando di avvio non faranno il lavoro. – LCC

+0

Grazie. Dopo aver caricato e caricato l'attività, StandardOutPath e StandardErrorPath funzionano correttamente. – hywl51