我使用 popen 在Python脚本中执行命令,我通过cron调用它。
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