【问题标题】:Crontab not executing my python script every 5 minutesCrontab 不每 5 分钟执行一次我的 python 脚本
【发布时间】:2021-07-08 17:26:56
【问题描述】:

我知道很多人问同样的问题,但我看不到我的失败。

我的目标是每 5 分钟执行一次代码,这是我的 cron 行,

*/5 * * * * /usr/bin/python3 /home/myUserName/folder-name-path/main.py

我做了所有我知道和发现的事情,

  • 脚本的第一行有#!/usr/bin/python3
  • 如果我在没有 cron 的情况下执行脚本不会崩溃。
  • 我做了which python3 并说“/usr/bin/python3”。

谁能解释一下我错在哪里?

编辑:

按照@CherryDT 所说,我必须补充一点,我的项目的结构类似于:

folder-name-path
   |-> lib (folder)  -> Some python scripts
   |-> data (folder) -> Some CSV data
   |-> temp (folder) -> A json file.

在我的脚本中,我将 python 文件导入为from lib import foo

EDIT2:

好的,问题不是我的 cron 脚本,问题是我的主文件夹中的子文件夹。

我尝试在没有导入的情况下安排另一个脚本并且运行良好。然后我几乎确定问题出在进口上。有人能告诉我我能做什么吗?我尝试从

import os
os.chdir(os.path.dirname(__file__))

但我有一个错误,FileNotFoundError: [Errno 2] No such file or directory: ''

我试过了

cwd = os.getcwd()
print(cwd)

我获得了主路径/home/myUserName/folder-name-path

非常感谢!

【问题讨论】:

  • 首先记录输出,然后检查您在日志中看到的内容:追加2>&1 >/home/myUserName/log.txt
  • 我的直觉告诉我,您的脚本希望在其工作目录设置为脚本所在目录的情况下运行,可能是因为您在脚本中使用了相对路径,但它不起作用正确,因为从 cron 运行时工作目录是别的东西。您可以尝试在脚本开头添加os.chdir(os.path.dirname(__file__))
  • @CherryDT mmm 实际上,folder-name-path 有 main.py 文件,但它导入了一些其他脚本 folder-name-path/lib 和 `folder-name-path/data` 中的一些 json 文件,这是不正确?
  • 另一个注意事项:#!/usr/bin/python 仅在您将 python 脚本设置为可执行文件并独立调用它时才需要(例如 /somepath/main.py)。由于您将它作为 python 解释器的参数执行,因此不需要该行。
  • 您尝试了这两个建议吗?以及富有洞察力的日志输出?使用 chdir 命令有什么不同吗?

标签: python cron


【解决方案1】:

最后,问题在于我的代码中的路径。 Crontab 需要绝对路径。

我认为它没有问题到达用户,但如果你的主文件夹中有不同的子文件夹,它将崩溃。

我解决它的方法是获取主路径,cwd

import os
cwd = os.getcwd()

并定义在开头添加cwd的所有路径,例如在我的例子中:

csv_data = cwd + '/folder-name-path/data/myData.csv'
json_data = cwd + '/folder-name-path/temp/myTemp.json'

我还在我的lib 文件夹中添加了__init__.py,不确定是否有必要,但它有助于python 理解这个文件夹有脚本。

谢谢!!

【讨论】:

    猜你喜欢
    • 2016-11-21
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2014-03-07
    • 2011-07-20
    • 2014-03-25
    • 1970-01-01
    相关资源
    最近更新 更多