Gdzie jest dziennik cron / crontab?

753

Chcę sprawdzić, czy moje zadanie cron jest wykonywane io której godzinie. Wydaje mi się, że istnieje dziennik moich sudo crontab -ezadań, ale gdzie?

Przeszukałem google i znalazłem rekomendacje do zajrzenia /var/log(w których nie widzę nic z „cron” w nazwie) i do edycji pliku, /etc/syslog.confktórego również nie mam.

Scott Szretter
źródło

Odpowiedzi:

894

Podczas instalacji domyślnej zadania cron są logowane

/var/log/syslog

Po uruchomieniu możesz zobaczyć tylko zadania cron w tym pliku dziennika

 grep CRON /var/log/syslog

Jeśli niczego nie zmieniłeś, wpisy będą tam.

Richard Holloway
źródło
46
Jeśli nie ma zainstalowanego MTA, cron po prostu wyrzuca wyniki zadania.
Barry Kelly,
11
Dziennik cron może znajdować się w innym pliku w /var/log/katalogu. Sprawdź plik cron.log lub równoważny.
Navigatron
4
to nie daje mi wyników pracy. po prostu daje ogólny komunikat, że cron został przetworzony.
chovy,
2
na AWS był / var / log / cron
tsukimi
5
@shadi można również grep -i CRONwyszukiwać bez rozróżniania wielkości liter
nafg
236

Możesz utworzyć plik cron.log zawierający tylko wpisy CRON, które pojawiają się w syslog. Pamiętaj, że zadania CRON nadal będą się wyświetlać w syslog, jeśli postępujesz zgodnie z poniższymi wskazówkami.

Otwórz plik

/etc/rsyslog.d/50-default.conf

Znajdź linię zaczynającą się od:

#cron.*

usuń komentarz z tej linii, zapisz plik i uruchom ponownie rsyslog:

sudo service rsyslog restart

Powinieneś teraz zobaczyć tutaj plik dziennika cron:

/var/log/cron.log

Aktywność Crona będzie teraz rejestrowana w tym pliku (oprócz syslog).

Zauważ, że w cron.log zobaczysz wpisy, kiedy cron uruchomił skrypty w /etc/cron.hourly, cron.daily itp. - np. Coś takiego:

Apr 12 14:17:01 cd CRON[14368]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

Jednak nie zobaczysz więcej informacji o tym, jakie skrypty zostały uruchomione w /etc/cron.daily lub /etc/cron.hourly, chyba że skrypty te kierują dane wyjściowe do pliku cron.log (lub może do innego pliku dziennika).

Jeśli chcesz sprawdzić, czy plik crontab jest uruchomiony i nie musisz go wyszukiwać w pliku cron.log lub syslog, utwórz plik crontab, który przekierowuje dane wyjściowe do wybranego pliku dziennika - coś takiego:

01 14 * * * /home/joe/myscript >> /home/log/myscript.log 2>&1

Spowoduje to przekierowanie wszystkich standardowych danych wyjściowych i błędów, które mogą zostać wywołane przez skrypt uruchamiany do określonego pliku dziennika.

użytkownik12345
źródło
1
Moim zdaniem ta odpowiedź jest lepsza w przyszłości. Twój plik syslog jest więc bardziej przejrzysty.
shgnInc,
9
Aby również wykluczyć dziennik cron z syslog, możesz zmienić linię *.*;auth,authpriv.none -/var/log/syslogna *.*;auth,authpriv.none,cron.none -/var/log/syslog.
Koen.
Na naszym CentOS 6, cron. * Zdefiniowany w /etc/rsyslog.conf, podczas gdy ja jest pusty w folderze rsyslog.d.
Scott Chu
co to jest 2>&1skrót?
John Joe
2
@JohnJoe 2> & 1 służy do przekazywania stderr do stdout, w ten sposób otrzymasz także stderr do pliku dziennika.
Sampo Sarrala,
79

Czasami przydatne może być ciągłe monitorowanie, w takim przypadku:

tail -f /var/log/syslog | grep CRON
KennyCason
źródło
10
Cóż, prawdopodobnie chcesz użyć -F, który będzie śledził plik w trakcie zmian nazw, aby po przycięciu / przeniesieniu do, np. /var/log/syslog.1.gzNadal śledziłeś bieżący /var/log/syslogplik. Według tail xxxx -f --retry
doktryny
37

Możesz również skierować dane wyjściowe poszczególnych cronjobs do ich własnych dzienników, aby uzyskać lepszą czytelność, wystarczy gdzieś dołączyć wynik daty.

 0 15 * * *    /home/andrew/daily-backup.sh >> /var/log/daily-backup.log 2>&1
Andrew Meyer
źródło
4
prawda, ale jeśli ten wiersz nie uruchomi się z powodu błędu składniowego, nic nie zostanie zapisane w określonym dzienniku wyjściowym.
Raptor,
11
Możesz rozwiązać ten problem, dodając 2> i 1 po określeniu pliku dziennika. Najlepszą praktyką jest również przetestowanie cronjobs przed dodaniem ich do crontab, a następnie obecność przy pierwszym zaplanowanym uruchomieniu, aby upewnić się, że crontab jest poprawnie sformatowany.
Andrew Meyer,
10

Jeśli systemdzainstalowałeś w swoim systemie, możesz wyświetlić dziennik zadań cron za pomocą journalctlpolecenia.

Na przykład na moim Ubuntu 17.10:

journalctl -u cron.service
an9wer
źródło
9

To bardzo stare pytanie, ale żadna z tych odpowiedzi nie wydaje się zadowalająca.

Najpierw uruchamiaj zadanie crona co minutę, a następnie uruchamiaj crona jako nie-demon (tymczasowo, po prostu zabij każdy crond, który mógł już się uruchomić) przy logowaniu testowym:

crond -nx test

I zobacz dziennik wykonania programu przepływającego przez twój terminal.

Tristan Maat
źródło
7
Nie działa w dniu 14.04 -No command 'crond' found, did you mean: Command 'cron' from package 'cron' (main)
G-.
8

Jest /var/log/syslogdomyślnie włączony.

Ale można go skonfigurować, aby utworzyć osobny plik cron.log, co jest bardziej przydatne.

Niniejsze pytania i odpowiedzi opisują proces:

16.04: Jak sprawić, aby cron utworzył cron.log i monitorował go w czasie rzeczywistym?

Również w tej odpowiedzi znajdują się instrukcje tworzenia wcronpolecenia, które wyświetla je prawie w czasie rzeczywistym. Ponadto łączy się z inną odpowiedzią,

Jak zmienić poziom dziennika cron?

pokazuje, jak zmienić poziom dziennika, aby obejmował coś więcej niż tylko rozpoczęcie zadań - poziom 15 pokaże również błędy i czas zakończenia.

SDsolar
źródło
5

Fedoar 29 i RHEL 7

journalctl -t CROND

Z journalctlinstrukcji:

   -t, --identifier=SYSLOG_IDENTIFIER|PATTERN
       Show messages for the specified syslog identifier SYSLOG_IDENTIFIER, or for any of the messages with a "SYSLOG_IDENTIFIER" matched by PATTERN.

       This parameter can be specified multiple times.
Harlem Wiewiórka
źródło
3

Możesz przekierować wyjście crona do pliku tmp

Takich jak: 00 11 07 * * / bin / bash /home/ubuntu/command.sh> / tmp / output 2> & 1

Błąd i normalne wyjście, oba zostaną przekierowane do tego samego pliku

Himanshu
źródło
2

Jak wspomniano wcześniej, zadania cron są logowane do /var/log/syslog

Możesz przesłać syslog do grep i odfiltrować dzienniki CRON, w ten sposób

less /var/log/syslog | grep CRON 

Możesz przeszukiwać swoje dzienniki crontab, w ten sposób

less /var/log/syslog | grep CRON | grep <search-keyword-comes-here>

Możesz przeszukiwać dzienniki historii crontab przechowywane w plikach gz, tak jak to

less /var/log/syslog.2.gz | grep CRON | grep <search-keyword-comes-here>

Zawsze dobrze jest mieć mechanizm rejestrowania, możesz szybko skonfigurować ELK dla swoich serwerów, możesz także eksperymentować z logz .

zero
źródło