【问题标题】:Crontab Headaches when trying Python [closed]尝试 Python 时 Crontab 头痛 [关闭]
【发布时间】:2021-11-03 18:31:49
【问题描述】:

我已经成功运行了一个 crontab,但是当我引入一个 python 脚本时,什么也没有发生。我已经验证我的 python 文件在直接从 shell 运行时可以工作。

crontab 是:

* * * * * /Users/myname/myzsh.zsh

myzsh.zsh 在哪里:

#!/bin/zsh
/Users/mypath_to/python /Users/myname/testscript.py

什么都没发生

【问题讨论】:

  • 脚本没有运行吗?是否可执行?通常你会在脚本路径之前提供 shell 的路径。为什么不直接使用 cron 调用命令?
  • .py 脚本不运行。我试过直接在 cron 中调用命令,但会再试一次
  • 好的,我只尝试了 crontab,-/path/to/python /path/to/.py。仍然没有运行 py
  • @Prolle:什么都没有发生应该是什么意思?我建议在您的 zsh-script 中,打开-x,并且在运行脚本之前还放置一个/Users/mypath_to/python --version,以验证 Python 是否基本正常工作。从这里开始,您可以添加更多的调试命令。
  • 原来 cron 本身没有权限。我将它拖放到首选项的安全部分,瞧!

标签: python unix cron zsh


【解决方案1】:

原来 cron 本身没有权限。我将它拖放到首选项的安全部分,瞧!

【讨论】:

    【解决方案2】:

    这是一个很常见的cron gotcha。

    交互式运行和 cron 运行的环境不同。 这会导致观察到的故障。

    我假设您向我们展示了 crontab -l 以同一用户身份运行 以交互方式运行脚本, 所以我们不与root在cron下运行有出入。

    您的$PWD,当前工作目录,可能很重要。 许多 cron 作业会做这样的事情:

    cd some_dir && ./my_script.zsh
    

    引用第 5 章 crontab 手册页:

    ... HOME、SHELL 和 PATH 可能会被 crontab 中的设置覆盖...

    ...交给子进程的环境基本上是来自/etc/rc的环境。

    真的想在执行脚本之前美化环境。

    我怀疑你至少需要

    env PYTHONPATH=. /Users/myname/myzsh.zsh
    

    许多 my 脚本设置了 conda 环境 在调用 cPython 之前, 所以$PATH 很好。 运行一个简单的env | sort >> /tmp/log.txt的cron作业 查看默认情况下 PATH 的外观。 尝试以交互方式使用该 PATH 设置,然后 您可能会注意到该脚本的失败与在 cron 下的失败相同。

    你可能会发现埋葬cd direxport PATH=...很方便 在 myzsh.zsh 脚本中。

    考虑运行python -m site 以帮助调试sys.path 详细信息。


    您的脚本可能会出现致命错误,即非零退出状态。 作为调试的辅助,考虑添加

    MAILTO=prolle@some.email.provider.com
    

    然后cron 守护进程将向您发送脚本的输出, 如果它在 stdout + stderr 上产生多于零行。

    【讨论】:

    • tks - 我如何找出我应该为 PYTHONPATH 使用什么值(我只知道它不是 python 可执行文件的位置)
    • 我给了你值:简单的.点,表示当前工作目录。顺便说一句,您肯定希望 cron 使用与您的交互式 PWD 匹配的 PWD。 Python 使用 PWD 加上 . 的设置来正确填充 sys.path,这是 import 在尝试查找合适的库文件时所依赖的。
    • 谢谢。也不工作。我可能会尝试使用 conda envs
    • 我什么都试过了。这让我发疯,我已经花了整整两天的时间。我现在停不下来了!!
    • 您没有分享 cron 通过电子邮件发送给您的任何诊断信息。好的,假设您的服务器未正确配置为发送电子邮件,因此 MAILTO= 没有帮助。您可以通过这种方式获得很多相同的东西:* * * * * env PYTHONPATH=。 /Users/myname/myzsh.zsh >> /tmp/stdout.txt 2>> /tmp/stderr.txt
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 2013-05-12
    • 2017-12-05
    • 2012-07-29
    • 1970-01-01
    • 2021-04-19
    • 2023-04-09
    相关资源
    最近更新 更多