Come posso testare un nuovo cron script?


14

Sono in esecuzione su un paio di diverse distro Linux (Fedora 11, CentOS 5 e SuSE 10.2) e spesso incontro un problema in cui un nuovo script che voglio eseguire come cron job funziona bene quando viene chiamato direttamente dalla riga di comando, ma fallisce quando viene chiamato da cron a causa di lievi variazioni nel PERCORSO o in altre variabili d'ambiente richieste.

Esiste un modo per testare l'esecuzione di un singolo script come se fosse eseguito da cron, senza dover eseguire l'intero crontab o utilizzare run-parts per eseguire l'intera directory cron.daily / .hourly ecc.? Immagino che potrei modificare temporaneamente il mio crontab per eseguire lo script nei prossimi due minuti, ma preferirei avere una soluzione più autonoma in modo da non rischiare di rovinare il crontab.

Risposte:


9

Da ricerca su Google in poipath in crontab

root@pingu # cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Fondamentalmente vuoi impostare il PERCORSO e quindi non devi preoccuparti delle variazioni. Inoltre, il test rapido consiste nell'eseguire lo script tramite SSH su tutte le caselle utilizzando le stesse variabili di ambiente.


Grazie, non avevo pensato che un crontab fosse proprio come uno script in cui puoi dichiarare le variabili d'ambiente all'interno del crontab.
gareth_bowles,

7

Se sto eseguendo un lavoro cron programmato individualmente (una riga separata in crontab) lo pianificherò per ogni minuto o ogni altro minuto mentre lo collaudo. Una volta testato, modificherò la linea crontab in modo che funzioni sulla frequenza che desidero.

Come nota a margine, se voglio verificare che cron stesso funzioni correttamente e inviando i risultati via e-mail all'indirizzo corretto (MOLTO importante) aggiungerò la seguente riga al mio / etc / crontab:

 * * * * * root ls /doesnotexistfoobar

Viene eseguito ogni minuto e tenta di eseguire un'operazione lssu una directory che non esiste. Dovrebbe inviare un messaggio di errore ogni minuto. Commento la frase quando ho funzionato.

Torna alla tua domanda: probabilmente non vuoi modificare il cron job esistente per eseguirlo spesso, sia perché c'è la possibilità di dimenticare di cambiarlo di nuovo, sia perché esegui cron.hourly, cron.daily o cron.whatever spesso potrebbe avere effetti collaterali, a seconda di cosa ci sei dentro. Per assicurarti di eseguire lo script nello stesso ambiente in cui si troverà quando viene chiamato da cron, ti consiglio di modificare il mio trucco "ls" sopra:

Aggiungi una linea al tuo crontab per eseguire direttamente lo script:

 * * * * * root /etc/cron.hourly/customscript

In questo modo è possibile eseguirlo tutte le volte che è necessario testarlo.


Grazie - se potessi votare anche questa come risposta corretta, lo farei!
gareth_bowles,

0

Non conosco una soluzione più diretta, ma potresti creare un utente (diciamo, crontest) con privs per il tuo script e utilizzare il crontab specifico dell'utente per l'utente "crontest" per testare gli script modificando per far funzionare lo script nei prossimi due minuti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.