在cron中执行popen的Python问题
我在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
这行代码。