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?

È stato utile?

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
scroll top