Problemi con CRON

A chi non è mai capitato di avere problemi con script lanciati via cron, che invece eseguiti da shell funzionano perfettamente?

Come è noto, il problema dipende dall’ambiente in cui sono eseguiti gli script di cron, dato che per ragioni di sicurezza è molto più restrittivo di quello di root.

Come risolvere? Ovviamente testando gli script nello stesso environment in cui saranno poi lanciati dal daemon.

Io uso questo semplice metodo:

Creo preventivamente uno snapshot delle variabili di ambiente di cron aggiungendo temporaneamente un nuovo evento

mm hh * * * env > /root/.crondef

sostituendo a mm e hh i minuti e l’ora di un paio di minuti nel futuro, attimo in cui l’evento creerà un file /root/.crondef contenente la definizione dell’ambiente di cron. Su debian wheezy il file ha questi elementi:

SHELL=/bin/sh
PATH=/usr/bin:/bin
PWD=/root
LANG=it_IT
SHLVL=1
HOME=/root
LOGNAME=root
_=/usr/bin/env

Una volta creato il file, la riga temporanea non serve più e può essere rimossa dalla tavola di cron.

Uso poi uno script che lancia il comando cron da testare nello stesso ambiente che troverà quando sarà istanziato dal daemon:

#!/bin/bash
if [ "-$1-" == "--" ]
   then
     echo "uso testcron <comando>"
     exit
fi
env - `cat /root/.crondef` $1
echo "<--------------->"
echo "Terminato con stato: $#"
<

Il comando avrà a disposizione le stesse risorse di quando sarà temporizzato, per cui diventa semplice correggerne i problemi, nella stragrande maggioranza dei casi dovuti ad errori di path.

Pubblicato in Linux, Script, Tools Taggato con: , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*