Pergunta

Eu uso popen para executar comandos em um script Python, e eu chamá-lo via cron.
Cron chama esse script, mas o comportamento não é o mesmo, se eu chamá-lo com a mão.

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

Ao lado:

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

Por cron (em / tmp / err_cron):

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

Por cron não executar este script normalmente?

Foi útil?

Solução

Normalmente, quando os processos são executados a partir de cron, o PATH está definido para um valor muito restritiva (a página do manual para o meu crontab diz /usr/bin:/bin). Você pode precisar adicionar:

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

para o topo do seu arquivo crontab.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top