2013-05-23 9 views
15

Skonfigurowałem launchd, aby uruchomić polecenie o 18 wieczorem każdego dnia na moim Mac Pro, ale to nie działało.Jak sprawdzić, czy launchd uruchomił skrypt?

Chcę sprawdzić, czy polecenie launchd uruchomiło komendę. Próbowałem konsoli systemowej, nie znalazłem nic cennego.

moja wersja Mac OS jest system Mac OS X 10.8.3

Mój plik 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

Chciałbym zwrócić uwagę na te (jak ja), które nie zauważyłem, ale plik wykonywalny jest w pełni kwalifikowany '/ opt/local/bin/node'. Jest to prawdopodobnie konieczne, ponieważ launchd ma [inną konfigurację środowiska] (https://discussions.apple.com/thread/3244126?tstart=0) niż użytkownik, mimo że skrypt jest [uruchamiany pod kontem użytkownika] (https: //developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html#pageTitle). – Jeff

Odpowiedz

18

Zdefiniowano StartCalendarInterval, więc zadanie zostało wykonane, gdy został załadowany i będzie wykonywany codziennie o 18:00.

launchd Query (8), aby dowiedzieć się jego status wyjścia:

launchctl list | grep mytask 

ten powróci linia linia to:

<pid> <status> mytask 

Kiedy pid jest liczbą, zadanie jest aktualnie uruchomiony. W przeciwnym razie spójrz na status, który jest kodem wyjścia programu, węzła w twoim przypadku. Kod zakończenia 0 oznacza, że ​​program został pomyślnie zakończony lub nie został jeszcze uruchomiony. Liczby dodatnie są zwracane dla błędów programu, podczas gdy ujemne oznaczają, że zadanie zostało zakończone z powodu sygnału.

Zakładam, że zadanie nie powiodło się. Możesz sprawdzić standardowe wyjście/błąd programu. Podaj StandardOutPath i StandardErrorPath, aby to zrobić. Treść tych plików prawdopodobnie powie Ci, dlaczego program się nie powiódł.

+0

Uruchomiłem listę launchctl i otrzymałem status 0. Dodaję StandardOutPath i StandardErrorPath do plist jak wyżej, ale nie znaleziono pliku po uruchomieniu zadania z uruchomieniem launchctl. Wydaje mi się, że zadanie to nie zostało jeszcze rozpoczęte. – hywl51

+2

Po zmianie należy ponownie wczytać definicję zadania ('unload', następnie' load'). Po prostu modyfikowanie pliku i wydawanie komendy start nie wykona zadania. – LCC

+0

Dzięki. Po załadowaniu i załadowaniu zadania, StandardOutPath i StandardErrorPath działają bez zarzutu. – hywl51

Powiązane problemy