【发布时间】: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 命令有什么不同吗?