Jak mogę sprawdzić, czy moja cogodzinna praca crona została uruchomiona?

26

Stworzyłem plik o nazwie ntpdatew/etc/cron.hourly

#!/bin/sh
/usr/sbin/ntpdate-debian
date > /tmp/william_tmp
date > /william_tmp
date > ~/william_tmp
echo test

Zrobiłem też Chmod 755 do tego pliku.

Nie wiem jednak, czy plik został uruchomiony, czy nie!

Plik nie jest tworzony w żadnym z 3 katalogów.

Jeśli uruchomię ręcznie, cd / && run-parts --report /etc/cron.hourlypliki zostaną utworzone i otrzymam echo.

Czy ktoś może polecić (najlepiej krok po kroku!) Instrukcje, aby sprawdzić, czy działa?

wilhil
źródło

Odpowiedzi:

25

Jedną z głównych pułapek dla crona jest to, że cron działa w ekstremalnie ograniczonym środowisku powłoki, w wyniku czego wiele zmiennych nie jest eksportowanych do środowiska, głównie $ PATH. Upewnij się, że korzystać ze wszystkich ścieżek bezwzględnych do pliku wykonywalnego, w tym wspólne funkcje, takie jak echo, uptime, dateitp wszystko trzeba używać pełnych ścieżek ( /bin/echo, /bin/date, /usr/bin/uptime). Aby określić ścieżkę do pliku wykonywalnego, możesz użyć whichpolecenia w następujący sposób: which echo- wyświetli się pełna ścieżka do tego narzędzia.

Marco Ceppi
źródło
Jak omówiono na czacie, dziękuję za to i naprawdę mam nadzieję, że to pomoże komuś innemu ... Chociaż zrobiłem ścieżkę upadku do ntpdate, jestem tak przyzwyczajony do systemu Windows i echo / data są po prostu „wbudowane”, po prostu nie zrobiłem Sądzę, że potrzebowałbym pełnej ścieżki ... nauczenia się dużo więcej o Linuksie i to ma sens!
wilhil
36

Powinieneś zajrzeć do /var/log/syslogpliku dziennika. Gdyby uruchomił się cron, miałby linię taką jak:

Jun 11 19:09:01 penguin CRON[17376]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Jun 11 19:17:01 penguin CRON[17799]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

Aby uzyskać wskazówki dotyczące rozwiązywania problemów, zobacz https://help.ubuntu.com/community/CronHowto#Troublesh_and_Common_Problems

Lekensteyn
źródło
W Syslog nie ma nic i nie widzę żadnego powodu, dla którego miałby zawieść z tego linku :(
wilhil
1
Jeśli w syslog ( grep -i cron /var/log/syslog /var/log/syslog.1) nie ma żadnych wpisów , zacznij sprawdzać, czy demon cron działa: ps uww -C cronpowinien zawierać wiersz z procesem.
Lekensteyn,
Przepraszam, że wprowadzam w błąd, w dzienniku systemowym są wpisy dotyczące Crona, po prostu nic związanego z tym poleceniem ... Wiem, że niektóre zadania uruchamiane są co godzinę, dostaję alert o nowej wiadomości ... AFAIK, te, które działają, są z crontab, nie ma nic w cron.hourly, co właśnie staram się uruchomić
wilhil
2

Spróbuj zmienić pierwszy wiersz skryptu (tłumacza) na:

#!/bin/bash

W przeszłości miałem również problemy ze zmiennymi środowiskowymi i problemami z PATH. Po zmianie tłumacza na bashmoje problemy zniknęły.

Awi
źródło
1

Biorąc pod uwagę, że dodałem clearme.shskrypt/etc/cron.hourly/

Wystarczy filtrować zadania CRON w terminalu za pomocą potężnego narzędzia egrep i awk :

$ cat /var/log/syslog | egrep clearme | awk "{ print $1 }" > ~/Desktop/cronlog.txt

Dane wyjściowe będą wyglądać następująco:

Jan 14 15:20:01 markets-dev CRON[10089]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 15:40:01 markets-dev CRON[18042]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:00:01 markets-dev CRON[22817]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:20:01 markets-dev CRON[28183]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:40:01 markets-dev CRON[411]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:00:01 markets-dev CRON[5442]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:20:01 markets-dev CRON[11935]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)

Aby wyjaśnić wszystko krok po kroku:

  1. cat / var / log / syslog - wydrukuj mi dziennik systemu
  2. egrep clearme - ale zaznaczaj tylko wiersze zawierające tekst clearme
  3. awk "{print $ 1}" - wydrukuj mi ten wiersz, który zawiera tekst clearme
  4. > ~ / Desktop / cronlog.txt - wyświetla wyniki w pliku cronlog.txt znajdującym się w katalogu Desktop .

Czwarty krok jest opcjonalny. Po prostu wydrukuje wyniki w terminalu zamiast pliku.

Daniel Andrei Mincă
źródło