【问题标题】:How to implement crontab that executes Python that imports a module如何实现执行导入模块的 Python 的 crontab
【发布时间】:2016-07-05 02:15:13
【问题描述】:

所以我有一个 Python 文件,可以从终端/命令行正常运行。 Python 文件使用使用 pip 导入的模块。我已经将我的 crontab 文件设置为每个工作日下午 1:15 运行:

15 13 * * 1-5 python ~/Personal/Code/Python/HelloWorld.py

我的问题有两个。首先,python 文件的输出被发送到/var/mail/,而不是像从命令行正常运行时那样输出到终端屏幕。如何直接在终端中打印输出而不是附加到文件中?其次,在/var/mail/ 文件中,脚本的输出是ImportError,表示没有与我正在导入的模块同名的模块。直接从命令行运行脚本时不会发生这种情况,在这种情况下,脚本可以正常工作而不会出现错误。我该如何解决这个问题?

【问题讨论】:

    标签: python python-2.7 cron pip crontab


    【解决方案1】:

    不要刻薄,但你的问题是单一的:你不懂Cron

    Cron 是一个调度工具。它是告诉你的电脑“嘿,经常照顾这个,好吗?”这是一个自动化过程在设置后不会与您交互。系统管理员最常使用它来处理诸如移动日志或复制磁盘之类的任务——管理员不想看到的事情。 Cron 作业应该输出到某处的日志文件而不是控制台。 (当 Cron 确实 接收到stdout 的输出时,它会保存输出并通过系统指定的邮件代理将其邮寄给您。这涉及到将数据存储在您发现的/var/mail/。)

    这意味着您无法从 Cron 运行的作业中获取输出到您的终端(没有对 tty 设备进行一些操作,我要说这不是您想要采用的路线)。我不确定在什么情况下您可能希望每天在下午 1:15 重复自动作业,同时还将其输出重定向到您的终端。如果你关闭你的终端怎么办?作业将其输出发送到哪里?您需要实现日志记录。查看 Python 的 logging 模块。

    至于ImportError:Cron 不在你的shell 中运行。它不使用您的环境变量或$PATH。那么这是什么意思?那么你的工作从python 开始。哪个python/usr/bin/python? /usr/local/bin/python? /usr/local/bin/python3?使用哪个二进制文件取决于您的操作系统和设置,但无论如何可以肯定地说,虽然 your Python 有该模块,但 default Python 可执行文件没有。为了解决这个问题,您应该使用 绝对路径,例如将 python 替换为 /usr/bin/python 或其他。要了解您使用的 Python,请在命令行上执行 which python,输出会告诉您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      相关资源
      最近更新 更多