Sprawdź, czy crontab działa

82

Chcę sprawdzić, czy określony crontab działa poprawnie. Dodałem taką pracę:

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1

Wiem, że przekierowuję na urządzenie zerowe, ale nie jestem pewien, czy powyższe polecenie jest dobre.

* Edycja 1: W moim / var / log / syslog co dwie minuty mam następujący błąd:

 (CRON) error (grandchild #2788 failed with exit status 2)

* Edycja 2: Brak błędów w logach dla tego nowego zadania:

 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1
croppio.com
źródło
niestety wszystkie powyższe wypróbowane, ale dla mnie nie działa. jak mówisz, wersja próbna / bin / sh -c "(eksport PATH = / bin; /tmp/trial.sh </ dev / null)" pokazuje poniższy komunikat, nie jestem pewien, co to jest / bin / sh: PATH = / bin : nie jest identyfikatorem

Odpowiedzi:

73

Składnia wpisu crontab wygląda poprawnie. Rzeczywiście, jeśli edytujesz swój plik crontab za pomocą „ crontab -e” (tak jak powinieneś), pojawi się błąd, jeśli i tak określisz niepoprawnie składniową pozycję pliku crontab.

  1. Po pierwsze, czy /path_to_my_php_script/info.phpdziała poprawnie z wiersza poleceń?

  2. Jeśli tak, to czy działa poprawnie tak:

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. Jeśli to działa, czy to działa w ten sposób?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
    

Krok (3) jest podobny do tego, w jaki sposób cron uruchomi twój program (jak udokumentowano w „man 5 cron”).

Najbardziej prawdopodobnym problemem jest to, że cron PATH używa do uruchomienia programu, jest zbyt restrykcyjny. Dlatego możesz chcieć dodać coś takiego jak poniżej na górze wpisu crontab (musisz dodać katalogi, których będzie potrzebował twój skrypt):

PATH=~/bin:/usr/bin/:/bin

Zauważ też, że cron domyślnie użyje /bin/sh, a nie bash. Jeśli potrzebujesz bash, dodaj go również na początku pliku crontab:

SHELL=/bin/bash

Zauważ, że obie te zmiany wpłyną na wszystkie wpisy crontab. Jeśli chcesz zmodyfikować te wartości dla swojego info.phpprogramu, możesz zrobić coś takiego:

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

Warto również wspomnieć, że w systemie skonfigurowanym dla „mail” (innymi słowy w systemie, który ma skonfigurowany MTA [sendmail / postfix / etc]), wszystkie dane wyjściowe z programów crontab są wysyłane automatycznie pocztą elektroniczną. Domyślny system komputerowy Ubuntu nie ma skonfigurowanej poczty lokalnej, ale jeśli pracujesz na serwerze, możesz po prostu wpisać „mail” w terminalu, aby zobaczyć wszystkie te wiadomości cron. Dotyczy to również atpolecenia „ ”.

jamesodhunt
źródło
2
Odmawiam zgody na drugi krok. Co powinienem zrobić?
akikara,
@akikara chmod + x ./cron.sh - oczywiście zamień ./cron.sh na dowolną lokalizację pliku, którą próbujesz uruchomić
Tisch
46

Chociaż bardzo rzadko, czasem cron przestaje działać poprawnie, nawet jeśli usługa jest uruchomiona. Oto jak sprawdzić, czy crond jest uruchomiony i zatrzymać / uruchomić usługę.

W systemie Linux:

service crond status
service crond stop
service crond start

W Ubuntu i innych systemach opartych na Debianie:

service cron status
service cron stop
service cron start
użytkownik53817
źródło
13
Tylko uwaga ... dla Ubuntu to cronnie jestcrond
Amit Kohli,
32

Nie przekierowuj wyjścia błędu do / dev / null i grep / var / log / syslog dla wyjścia cron.

grep cron /var/log/syslog

Możesz natychmiast wyświetlać błędy podczas zapisywania pliku po edycji /etc/crontablub plików w nim za /etc/cron.d/pomocą:

tail -f /var/log/syslog | grep --line-buffered cron

Jeśli edycja jest poprawna, zobaczysz tylko RELOADpowiadomienie, wystąpią błędy jak

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 
rubiojr
źródło
18

Możesz zobaczyć swojego aktywnego crona za pomocą polecenia terminalu:

crontab -l

Oto parametry w kolejności:

  1. min (0–59)

  2. godzina (0-23)

  3. dzień miesiąca (1-31)

  4. miesiąc (1-12)

  5. dzień tygodnia (0–6) (niedziela = 0)

  6. Komenda

Więc wywołujesz swój skrypt co pierwszą minutę każdej godziny. W celu testowania powinieneś częściej testować swoje dane wyjściowe:

* * * * * <command> #Runs every minute

Będzie to nazywać co minutę!

bioShark
źródło
* / 2 * * * *
Zmieniam
11

W przypadku części czasu w każdym wierszu możesz użyć tego testera cron do przetestowania / weryfikacji definicji czasu cron.

Ashish Karpe
źródło
To dobra sugestia.
Rahil Wazir,
2
przydatne również: crontab-generator.org
rubo77
2

Wierzę, że możesz także użyć run-partsdo uruchamiania zadań crona poza pasmem. To jest właśnie to, czego używa cron do uruchamiania okresowych zadań cron, więc podając odpowiednie argumenty, możesz je uruchomić w dowolnym momencie.

Jeśli chcesz po prostu uruchomić jeden plik zamiast wszystkich zadań cron zdefiniowanych np. /etc/cron.daily, Będziesz musiał podać argument regex wraz z poprawnym regex.run-parts --list --regex '^p.*d$' /etc

Należy pamiętać, że zadania cron są zwykle nazywane bez rozszerzenia i oznaczane jako pliki wykonywalne, więc upewnij się, że skrypty są podobne, chociaż użycie wyrażenia regularnego może pozwolić na uruchomienie skryptu z rozszerzeniem.

dragon788
źródło
1

ah !!

sam dostałem odpowiedź, sprawdziłem i nie znalazłem crondw domyślnym katalogu instalacyjnym tj/etc/init.d/

spróbuje teraz odpowiedzieć.

Uwaga - I nie sprawdzić cron.allow, cron.denyzbyt. Jak dotąd wszystko jest w porządku.

szczęście
źródło