Problema di Python durante l'esecuzione di popen in cron
Domanda
Uso popen
per eseguire comandi in uno script Python e lo chiamo tramite cron.
Cron chiama questo script ma il comportamento non è lo stesso se lo chiamo a mano.
Fonte:
from subprocess import Popen, PIPE
pp = Popen('/usr/bin/which iptables', shell=True, stdout=PIPE)
data = ''
for ln in pp.stdout:
data = data+ln
if data == '':
print 'ko'
else:
print 'ok : '+data
A mano:
# python /home/user/test.py
> : /sbin/iptables
Per cron (in / tmp / err_cron):
* * * * * /usr/bin/python /home/user/test.py >> /tmp/err_cron
ko
ko
ko
Perché cron non esegue questo script normalmente?
Soluzione
Normalmente quando i processi vengono eseguiti da cron, il PATH
è impostato su un valore molto restrittivo (la pagina man del mio crontab dice / usr / bin: / bin
) . Potrebbe essere necessario aggiungere:
PATH=/usr/bin:/bin:/sbin
all'inizio del file crontab.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow