2013-05-23 17 views
15

Ich habe den Launchd so konfiguriert, dass er jeden Tag um 18 Uhr einen Befehl auf meinem Mac Pro startet, aber es hat nicht funktioniert.Wie überprüft man, ob launchd das Skript gestartet hat?

Ich möchte überprüfen, ob der Launchd den Befehl ausgeführt hat. Ich habe die Systemkonsole ausprobiert, nichts Wertvolles gefunden.

mein Mac OS Version ist Mac OS X 10.8.3

Meine plist-Datei:

<?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

Ich würde auf diejenigen (wie mich) hinweisen, die nicht bemerkt haben, aber die ausführbare Datei ist voll qualifiziert '/ opt/local/bin/node'. Dies ist wahrscheinlich notwendig, da launchd [unterschiedliche Umgebungskonfiguration] (https://discussions.apple.com/thread/3244126?tstart=0) hat, als ein Benutzer, obwohl das Skript [unter dem Benutzerkonto ausgeführt wird] (https: //developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html#pageTitle). – Jeff

Antwort

18

Sie definiert StartCalendarInterval, so dass der Auftrag ausgeführt wurde, wenn es und geladen wurde es sein wird, ausgeführt jeden Tag um 18:00 Uhr.

Abfrage launchd (8) seinen Exit-Status, um herauszufinden:

launchctl list | grep mytask 

dies wird wieder eine Linie line:

<pid> <status> mytask 

Wenn pid eine Zahl ist, wird der Job zur Zeit läuft. Ansonsten schauen Sie sich status an, welches der Exit-Code des Programms ist, Knoten in Ihrem Fall. Ein Exit-Code von 0 bedeutet entweder, dass das Programm erfolgreich beendet wurde oder noch nicht gestartet wurde. Positive Zahlen werden für Programmfehler zurückgegeben, während negative Zahlen bedeuten, dass der Job aufgrund eines Signals beendet wurde.

Ich nehme an, der Job ist fehlgeschlagen. Vielleicht möchten Sie die Standardausgabe/-fehler des Programms überprüfen. Geben Sie dazu StandardOutPath und StandardErrorPath an. Der Inhalt dieser Dateien sagt Ihnen wahrscheinlich, warum das Programm fehlgeschlagen ist.

+0

Ich habe launchctl Liste ausgeführt und Status 0 bekommen. Ich füge StandardOutPath und StandardErrorPath wie oben beschrieben hinzu, aber nachdem ich die Aufgabe mit launchctl start ausgeführt habe, wurde keine Datei gefunden. Ich denke, es scheint, dass die Aufgabe noch nicht begonnen wurde. – hywl51

+2

Stellen Sie sicher, dass Sie die Jobdefinition ('unload', dann' load') erneut laden, nachdem Sie sie geändert haben. Wenn Sie nur die Datei ändern und einen Startbefehl ausgeben, wird der Job nicht ausgeführt. – LCC

+0

Danke. Nachdem ich die Aufgabe hochgeladen und geladen habe, funktionieren StandardOutPath und StandardErrorPath einwandfrei. – hywl51

Verwandte Themen