蟒在SU的cron给出比手动执行不同的输出
题
Ubuntu服务器9.10, 这是我的文件,test.py
import commands
blkid = commands.getoutput('blkid')
print blkid
当我手动运行(如SU)这样:
python test.py
我得到的输出处的 BLKID 如预期:
/dev/sda1: UUID="3f0ac5bb-f0da-4574-81f5-77844530b561" TYPE="ext4"
/dev/sda5: UUID="67df0e7c-74fb-47dd-8520-ad720fbed67d" TYPE="swap"
/dev/sdb1: UUID="85466892-8dae-461c-95da-b8f91c2e766b" TYPE="ext3"
/dev/sdc1: UUID="91b84635-21c2-4d9a-84f8-2bbaab16d41f" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdd1: UUID="6a52c830-0029-4154-80cb-f17274eb6fed" SEC_TYPE="ext2" TYPE="ext3"
然而,当我添加此我的SU的crontab:
* * * * * python /home/myusername/test.py > /home/myusername/output
的含量输出变为:
sh: blkid: not found
我缺少的是在这里吗?是Python 命令仅对某些SH-特定命令模块?我只是试图运行一个系统命令并捕获输出到一个变量,我可以解析。
解决方案
这个问题可能是你的$PATH
对根的(os.environ['PATH']
如果你在Python看着它,而不是外壳;-)。根的路径通常是非常保守的(这将是危险的,则其不再!)既然你不使用绝对路径运行blkid
可以轻松地意味着它是在你的路径,但不是根本的。
所以,做which blkid
为自己在shell提示下,sudo su
或反正成为root,并echo $PATH
- 您可以快速验证的问题。然后,您使用的BLKID的绝对完整路径在getoutput
调用,而不是就像你现在做裸标识blkid
修复它。
其他提示
计划作业的环境(和PATH)不一定相同登录shell。
不隶属于 StackOverflow