Python in SU cron fornisce un output diverso che manualmente l'esecuzione
Domanda
Ubuntu Server 9.10, Ecco il mio file, test.py
import commands
blkid = commands.getoutput('blkid')
print blkid
Quando ho eseguire manualmente (come SU) questo:
python test.py
Ho l'uscita del il comando blkid come previsto:
/dev/sda1: UUID="3f0ac5bb-f0da-4574-81f5-77844530b561" TYPE="ext4"
/dev/sda5: UUID="67df0e7c-74fb-47dd-8520-ad720fbed67d" TYPE="swap"
/dev/sdb1: UUID="85466892-8dae-461c-95da-b8f91c2e766b" TYPE="ext3"
/dev/sdc1: UUID="91b84635-21c2-4d9a-84f8-2bbaab16d41f" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdd1: UUID="6a52c830-0029-4154-80cb-f17274eb6fed" SEC_TYPE="ext2" TYPE="ext3"
Tuttavia, quando mi aggiungi questo al mio SU crontab:
* * * * * python /home/myusername/test.py > /home/myusername/output
Il contenuto di uscita diventa:
sh: blkid: not found
Quello che mi manca qui?È il Python comandi modulo solo per alcune SH-comandi specifici?Sto solo tenta di eseguire un comando di sistema e catturare l'output in una variabile che posso analizzare.
Soluzione
Il problema è probabilmente con il $PATH
contro il root (os.environ['PATH']
se stai guardando in Python piuttosto che shell;-).il PATH di root è in genere molto conservatore (sarebbe rischioso per NON essere!) e dal momento che si sta eseguendo blkid
senza specificare un percorso assoluto che si può facilmente dire che è sul vostro CAMMINO, ma non di root.
In modo da fare which blkid
come te al prompt della shell sudo su
o comunque diventare root, e echo $PATH
- si può verificare rapidamente il problema.Quindi è risolvere il problema utilizzando il comando blkid assoluta del percorso completo nel getoutput
chiamata piuttosto che solo il minimo identificatore blkid
come stai facendo ora.
Altri suggerimenti
L'ambiente (e il PERCORSO di un job di cron non è necessariamente la stessa come shell di login.