Gdzie jest plik dziennika cron w MacOSX Lion?

25

Chcę rozwiązać problem z działaniem crona, które działało dobrze do ostatniej modyfikacji, ale nie mogę znaleźć pliku dziennika cron, gdzie on jest?

Ali
źródło
2
Czy to naprawdę praca Crona, czy używasz uruchomionej. Cron został wycofany z systemu OS X.
jaberg
1
Czy ustawiłeś plik dziennika dla zadania cron?
daviesgeek
to właściwie cronpraca, z którą ją cron -ezałożyłem i mogę to zobaczyć cron -li jestem pewien, że to działało na Lwie, a wcześniej na Pantera Śniegu przez długi czas.
Ali
i nie, nie ustawiam ręcznie pliku dziennika dla samego „crona”, chociaż piszę do pliku dziennika wewnątrz zadania i ostatnio przestał działać po tym, jak coś zmieniłem.
Ali
2
Ali, ponieważ masz odpowiedź, opublikuj ją jako odpowiedź i zaakceptuj. Nie edytuj go w pytaniu. Możesz nie tylko odpowiedzieć na swoje pytanie, ale zachęcić Cię do tego.
Jason Salaz

Odpowiedzi:

30

Domyślnie cron nie rejestruje danych wyjściowych wykonanych zadań. Możliwe jest zarejestrowanie faktu, że cronjobs zostały wykonane, ale nie jest to również domyślne w OS X.

Aby zbadać dane wyjściowe wykonania cronjob, sugeruję zmodyfikowanie linii cronjob, aby przekierować STDOUT i STDERR do plików dziennika. W pliku crontab lub po uruchomieniu crontab -e, bez względu na to, jak to robisz, dodaj do swojej linii pracy coś takiego:

0 0 * * * yourcommand >/tmp/stdout.log 2>/tmp/stderr.log

W ten sposób należy wysłać STDOUT (normalnie drukowane lub wysyłane echem do STDOUT) do pliku tekstowego o nazwie stdout.log w katalogu / tmp, a STDERR do stderr.log w katalogu temp. Wiele narzędzi używa STDERR do drukowania specjalnych komunikatów o błędach, gdy są to błędy aplikacji, a nie błędy generowane przez faktyczne wykonanie programu. (Możesz przeczytać więcej o STDERR na Wikipedii.)

Jason Salaz
źródło
Dzięki, to właśnie starałem się zrobić, wygląda na to, że cronz jakiegoś powodu zawiodło zadanie w pierwszej kolejności. jeśli sam uruchomię zadanie, wpisując polecenie w terminalu, uruchamia ono i wyprowadza do pliku dziennika, ale jeśli czekam na cronuruchomienie, nic się nie dzieje, przynajmniej brak zmian w pliku dziennika, pomyślałem, że może „plik dziennika cron” "lub w konsoli były jakieś ślady, które mogłyby pomóc mi dowiedzieć się, co się dzieje, ostatnio zmieniłem moją powłokę z bash na zsh, ale nie sądzę, żeby to miało na to wpływ.
Ali
1
Według erikslab.com/2011/02/04/logging-with-launchd można zmodyfikować cron plist ( /System/Library/LaunchDaemons/com.vix.cron.plist) za pomocą ścieżki Stdout / Stderr, aby debugować sam cron. Nie pamiętam, czy launchctl unloading i launchctl loading plist jest wystarczający, czy też jest demonem systemowym, jeśli trzeba by całkowicie zrestartować. Sugeruję to drugie, aby się upewnić.
Jason Salaz
21

Znacznie łatwiej jest po prostu dodać następujące elementy /etc/syslog.conf:

cron.* /var/log/cron.log 

Następnie uruchom ponownie syslog

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist 
sudo launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist 

Testowane i działające na OSX 10.7.4

Fraidoon Sarwary
źródło
3
Podoba mi się ten pomysł - ale, jak /etc/syslog.confmówi 10.10.5, moje słowa # Note that flat file logs are now configured in /etc/asl.conf. Ten plik ma inną składnię, nie jest dla mnie jasne, jak skonfigurować logowanie w nim.
Ken Williams
@KenWilliams, nawet jeśli mówi, że syslog.conf nadal działa na High Sierra.
Fish Monitor
15

Domyślnie „rejestrowanie” nie jest włączone. Ale możesz uzyskać przydatne informacje, uruchamiając mailpolecenie.

TL; DR na mailkomendzie: naciśnij enter, aby odczytać wiadomości, a następnie qi enter, aby wyjść.

William Entriken
źródło
4
Bardzo dobrze, dziękuję. Mój pokazał mi, że z moim Cronem było nierozpoznane polecenie. Twoje zdrowie!
Joshua Pinter
7

Byłem w stanie znaleźć log Cron-Job,

/var/mail/{user-name}

Poniżej znajduje się dziennik zadania cron, który dostałem za uruchomienie komendy AWS CLI,

From [email protected]  Fri Mar  2 10:00:00 2018
Return-Path: <[email protected]>
X-Original-To: build
Delivered-To: [email protected]
Received: by BuildServer1.local (Postfix, from userid 501)
    id A7A94296CBA3; Fri,  2 Mar 2018 10:00:00 +0100 (CET)
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <build@BuildServer1> /app/scripts/s3-sync.sh
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=build>
X-Cron-Env: <USER=build>
X-Cron-Env: <HOME=/Users/build>
Message-Id: <[email protected]>
Date: Fri,  2 Mar 2018 10:00:00 +0100 (CET)

upload: ../../app/logs/debug.log to s3://**my-s3***/app/logs/debug.log
Vineeth
źródło
1
To wiadomość błędu zapisana w skrzynce pocztowejuser
nohillside
@patrix, udało mi się również znaleźć sukces w pracy crona. Zaktualizowałem odpowiedź.
Vineeth
Miły! Powinna być zaakceptowana odpowiedź!
Trollhorn
3

Okazało się, gdy cron wykonuje zadanie (jak ja), /usr/local/binnie ma go PATH.
Znalazłem to metodą prób i błędów i od samego początku budowałem pracę z prostych rzeczy, które, jak wiedziałem, działały i stopniowo dodawałem rzeczy, aż znalazłem problem.

O innych sugestiach i odpowiedziach:
Z jakiegoś powodu (przynajmniej na moim komputerze, na którym działa Lion uaktualniony z SnowLeopard) cron, nie używa parametrów określonych w plikach plist, które launchdsą przeznaczone do odczytu, /System/Library/LaunchDaemons/com.vix.cron.plista może cron na Lionie nic nie pisze do stdout lub stderr.

Przy okazji używam http://s3tools.org/s3cmd do syncfolderu z wiaderkiem Amazon S3 jako kopią zapasową (jak prymitywny DropBox).

Ali
źródło