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?


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.)


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


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ść.


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 build@BuildServer1.local  Fri Mar  2 10:00:00 2018
Return-Path: <build@BuildServer1.local>
X-Original-To: build
Delivered-To: build@BuildServer1.local
Received: by BuildServer1.local (Postfix, from userid 501)
    id A7A94296CBA3; Fri,  2 Mar 2018 10:00:00 +0100 (CET)
From: build@BuildServer1.local (Cron Daemon)
To: build@BuildServer1.local
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: <20180302090000.A7A94296CBA3@BuildServer1.local>
Date: Fri,  2 Mar 2018 10:00:00 +0100 (CET)

upload: ../../app/logs/debug.log to s3://**my-s3***/app/logs/debug.log

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).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.