【问题标题】:python crontab and pathspython crontab 和路径
【发布时间】:2014-10-27 07:54:27
【问题描述】:

我有一个 Python 驱动程序和同级库脚本:

/home/mydir/pythonProjs/
  • driver.py

  • lib.py

driver.py 我有电话:

from lib import method1

从我在 Linux 上的命令行成功:

python /home/mydir/pythonProjs/driver.py

但是当我在 crontab 中尝试以下操作时:

10 1 * * * export PYTHONPATH=~/mydir/pythonProjs; python /home/mydir/pythonProjs/driver.py

我得到错误:

ImportError: No module named lib.method1

我还尝试将我的 crontab 命令中的路径设置更改为完全限定路径 /home/mydir/pythonProjs,省略“导出”,并且还尝试写入 .sh 文件(使用必要的 #!bin/bash... )

我有一个主要问题和一个后续问题: 主要:解决我的问题的最佳实践方法是什么? 追问: cron 背后的原理是什么,其路径访问与我的 shell 不同?

在我太快被否决之前,我会提到我已经阅读但没有成功(或正确解析)以下内容: - Where can I set environment variables that crontab will use? - Crontab Issues running Python - http://pythonadventures.wordpress.com/2012/03/31/calling-a-python-script-from-crontab/

【问题讨论】:

    标签: python python-2.7 cron environment-variables


    【解决方案1】:

    尝试从虚拟作业中打印出环境变量

    * * * * * env > /tmp/env.output
    

    https://askubuntu.com/questions/23009/reasons-why-crontab-does-not-work建议的那样

    还要检查 shell crontab 正在使用什么。您可以通过添加一行将$SHELL 环境变量设置为bash

    SHELL=/bin/bash

    在 crontab 文件的开头。

    【讨论】:

    • 谢谢!除了您在我的 crontab 顶部建议的 SHELL 命令之外,我还需要在我的 driver.py 脚本顶部添加这个 shebang:#!/usr/bin/env python 奇怪的是,如果我不包括后者和 $ journalctl from回家,然后我没有看到从 cron 记录的任何错误,但 driver.py 没有完全执行(例如,它似乎没有导入 lib.py)。也感谢env > 的建议。
    • 如果可以的话,您能否解决后续问题?例如,像我这样的业余爱好者如何自己想出SHELL=/bin/bash#!/usr/bin/env python 解决方案?有哪些关于 cron 和/或 Python 的“标准”参考资料可以引导我走上正确的道路?
    • 嗨。关于您的后续问题。 cron 不读取用户的环境变量的原因是安全性。 cron 的标准参考是 Unix 手册页,例如unix.com/man-page/linux/5/crontab 最后,询问“最佳实践”在 SO 上是题外话,无论如何我对此没有一个好的答案。
    猜你喜欢
    • 2012-04-25
    • 2015-11-12
    • 2012-01-26
    • 2016-12-17
    • 2021-09-03
    • 2014-02-20
    • 2021-06-12
    • 1970-01-01
    • 2013-01-30
    相关资源
    最近更新 更多