在cron中执行popen的Python问题

8 投票
1 回答
3784 浏览
提问于 2025-04-15 15:15

我在Python脚本中使用popen来执行命令,并通过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调用这个脚本时不正常呢?

1 个回答

21

通常,当通过定时任务(cron)运行程序时,PATH这个环境变量会被设置得很有限(我的定时任务手册上写的是/usr/bin:/bin)。你可能需要在你的定时任务文件的最上面添加:

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

这行代码。

撰写回答