Вопрос

Я использую popen для выполнения команд в скрипте Python и вызываю его через cron.
Крон вызывает этот сценарий, но поведение не то же самое, если я вызываю его вручную.

Источник:

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

От руки:

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

По cron (в / tmp / err_cron):

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

Почему cron не запускает этот скрипт нормально?

Это было полезно?

Решение

Обычно, когда процессы запускаются из cron, для PATH устанавливается очень ограничительное значение (на странице руководства для моего crontab указано / usr / bin: / bin ) , Вам может понадобиться добавить:

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

в начало файла crontab.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top