【问题标题】:Python in SU cron gives different output than manually executionSU cron 中的 Python 提供与手动执行不同的输出
【发布时间】:2010-03-05 11:15:59
【问题描述】:

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 commands 模块是否仅适用于某些特定于 SH 的命令?我只是尝试运行系统命令并将输出捕获到我可以解析的变量中。

【问题讨论】:

    标签: python cron sudo crontab


    【解决方案1】:

    问题可能在于您的 $PATH 与 root 的(os.environ['PATH'] 如果您在 Python 而不是 shell 中查看它;-)。 root 的 PATH 通常非常保守(如果不这样做会很危险!),并且由于您在运行 blkid 时没有指定绝对路径,这很容易意味着它在您的 PATH 上而不是 root 上。

    which blkid 在 shell 提示符下以您自己的身份、sudo su 或无论如何成为 root 以及 echo $PATH 也是如此——您可以快速验证问题。然后,您可以在 getoutput 调用中使用 blkid 的绝对完整路径来修复它,而不是像现在这样仅使用裸标识符 blkid

    【讨论】:

    • 成功了,谢谢!我一直认为运行 cronjob 时的路径与您实际在 shell 中输入时的路径相同。
    【解决方案2】:

    cron 作业的环境(和 PATH)不一定与您的登录 shell 相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 2015-09-23
      • 2019-07-14
      • 1970-01-01
      • 2021-06-23
      相关资源
      最近更新 更多