Question

J'utilise popen pour exécuter des commandes dans un script Python, et je l'appelle via cron.
Cron appelle ce script, mais le comportement n'est pas le même si je l'appelle à la main.

Source:

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

À la main:

# python /home/user/test.py
> : /sbin/iptables

Par cron (dans / tmp / err_cron):

* * * * * /usr/bin/python /home/user/test.py >> /tmp/err_cron
ko
ko
ko

Pourquoi cron n'exécute-t-il pas ce script normalement?

Était-ce utile?

La solution

Normalement, lorsque les processus sont exécutés à partir de cron, le PATH est défini sur une valeur très restrictive (la page de manuel de ma crontab indique / usr / bin: / bin ). . Vous devrez peut-être ajouter:

PATH=/usr/bin:/bin:/sbin

en haut de votre fichier crontab.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top