Jeg vil verifisere om en bestemt crontab fungerer som den skal. Jeg har lagt til en slik jobb:
*/2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1
Jeg vet at jeg omdirigerer til null-enheten, men jeg er ikke sikker på om kommandoen ovenfor er bra.
(CRON) error (grandchild #2788 failed with exit status 2)
*Edit 2: Ingen feil i loggene med denne nye jobben:
*/2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1
Syntaksen for crontab-oppføringen ser riktig ut. Hvis du redigerer crontab-oppføringen ved hjelp av "crontab -e" (slik du skal), vil du likevel få en feil hvis du angir en syntaktisk ugyldig crontab-oppføring.
For det første, kjører /path_to_my_php_script/info.php
riktig fra kommandolinjen?
Hvis ja, kjøres det også riktig slik?:
/bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
Hvis det fungerer, fungerer det slik?
/bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
Trinn (3) ligner på hvordan cron vil kjøre programmet ditt (som dokumentert i "man 5 cron".
Det mest sannsynlige problemet du har er at PATH cron bruker for å kjøre programmet ditt er for restriktivt. Derfor kan det være lurt å legge til noe som følgende øverst i crontab-oppføringen (du må legge til i de katalogene skriptet ditt trenger):
PATH=~/bin:/usr/bin/:/bin
Vær også oppmerksom på at cron som standard vil bruke /bin/sh
, ikke bash. Hvis du trenger bash, må du også legge dette til i starten av crontab-filen:
SHELL=/bin/bash
Merk at begge disse endringene vil påvirke alle crontab-oppføringene. Hvis du bare vil endre disse verdiene for info.php
-programmet ditt, kan du gjøre noe sånt som dette:
*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"
Det' er også verdt å nevne at på et system konfigurert for "mail " (med andre ord et system som har en MTA konfigurert [sendmail / postfix / etc]), sendes all utdata fra crontab-programmer automatisk til deg via e-post. Et standard Ubuntu-skrivebordssystem vil ikke ha lokal e-post konfigurert, men hvis du jobber på en server, kan du bare skrive "mail" i en terminal for å se alle disse cron-e-postene. Dette gjelder også kommandoen "at".
Ikke omdiriger feilutdata til /dev/null og grep /var/log/syslog for cron-utdata.
grep cron /var/log/syslog
Du kan umiddelbart vise feil når du lagrer en fil etter å ha redigert /etc/crontab
eller filer i /etc/cron.d/
med:
tail -f /var/log/syslog | grep --line-buffered cron
Hvis redigeringen er ok, vil du bare se RELOAD
-varselet, feil vil oppstå som
Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new
Du kan se din aktive cron med terminal-kommandoen:
crontab -l
Her er parametrene i rekkefølge:
min (0 - 59)
time (0 - 23)
dag i måneden (1 - 31)
måned (1 - 12)
ukedag (0 - 6) (søndag=0)
kommando
Så du kaller skriptet ditt hvert første minutt av hver time. Du bør teste utdataene dine med et oftere intervall for testformål:
* * * * * <command> #Runs every minute
Dette vil kalle det hvert minutt!