Pregunta

Utilizo popen para ejecutar comandos en un script de Python, y lo llamo a través de cron.
Cron llama a este script pero el comportamiento no es el mismo si lo llamo a mano.

Fuente:

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

Por cron (en / tmp / err_cron):

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

¿Por qué cron no ejecuta este script normalmente?

¿Fue útil?

Solución

Normalmente, cuando los procesos se ejecutan desde cron, el PATH se establece en un valor muy restrictivo (la página de manual de mi crontab dice / usr / bin: / bin ) . Es posible que deba agregar:

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

a la parte superior de su archivo crontab.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top