Controleer of crontab werkt

Ik wil controleren of een bepaalde crontab goed werkt. Ik heb een job als deze toegevoegd:

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

Ik weet dat ik doorverwijs naar het null-apparaat, maar ik weet niet zeker of het bovenstaande commando goed is.

*Edit 1: In mijn /var/log/syslog heb ik om de twee minuten de volgende foutmelding:

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

*Edit 2: Geen fouten in de logs met deze nieuwe job:

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

De syntax voor de crontab entry ziet er correct uit. Inderdaad, als je je crontab bewerkt met "crontab -e" (zoals je zou moeten), krijg je'een foutmelding als je toch een syntactisch ongeldige crontab entry specificeert.

  1. Ten eerste, draait /path_to_my_php_script/info.php correct vanaf de command-line?

  2. Zo ja, draait het ook goed op deze manier?

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

Stap (3) is vergelijkbaar met hoe cron uw programma zal uitvoeren (zoals gedocumenteerd in "man 5 cron".

Het meest waarschijnlijke probleem dat je hebt is dat het PATH dat cron gebruikt om je programma uit te voeren te beperkend is. Daarom zou je misschien iets als het volgende willen toevoegen aan de top van je crontab entry (je'zult moeten toevoegen in welke directories je script ook nodig zal hebben):

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

Merk ook op dat cron standaard /bin/sh zal gebruiken, niet bash. Als je bash nodig hebt, voeg dan ook dit toe aan het begin van je crontab bestand:

SHELL=/bin/bash

Merk op dat beide wijzigingen alle crontab entries zullen beïnvloeden. Als je alleen deze waarden wilt wijzigen voor je info.php programma, dan zou je iets als dit kunnen doen:

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

Het is ook de moeite waard te vermelden dat op een systeem geconfigureerd voor "mail" (met andere woorden een systeem dat een MTA geconfigureerd heeft [sendmail/postfix/etc]), alle output van crontab programma's automatisch via e-mail naar u wordt verzonden. Een standaard Ubuntu desktop systeem zal'geen lokale mail geconfigureerd hebben, maar als je'op een server werkt kun je gewoon "mail" in een terminal typen om al die cron mails te zien. Dit geldt ook voor het "at" commando.

Commentaren (2)

Foutuitvoer niet doorsturen naar /dev/null en grep /var/log/syslog voor cron uitvoer.

grep cron /var/log/syslog

U kunt direct fouten tonen bij het opslaan van een bestand na het bewerken van /etc/crontab of bestanden binnen /etc/cron.d/ met:

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

Als de bewerking ok is, zult u alleen de RELOAD melding zien, fouten zullen optreden zoals

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 
Commentaren (0)

U kunt uw actieve cron zien met het terminal commando:

crontab -l

Hier zijn de parameters in volgorde:

  1. min (0 - 59)

  2. uur (0 - 23)

  3. dag van de maand (1 - 31)

  4. maand (1 - 12)

  5. dag van de week (0 - 6) (Zondag=0)

  6. commando

Dus, je roept je script elke eerste minuut van elk uur aan. Je zou je uitvoer vaker moeten testen om te testen:

* * * * *  #Runs every minute

Dit zal het elke minuut aanroepen!

Commentaren (1)