我面临的一个问题是crontab没有在Raspberry Pi3上安装的Raspbian GNU / Linux 9.4(stretch)中运行python脚本 . 我对这个主题进行了大量的研究,例如按照https://askubuntu.com/questions/23009/why-crontab-scripts-are-not-working/24527#24527中的故障排除指南,但它们都没有解决我的问题 .

我想要运行的python脚本位于

/home/pi/Documents/Fork_BookManager.py

我确保任何人都可以执行,阅读和更改上述文件的内容 .

我可以写终端通过终端运行这个文件

usr/bin/python3 /home/pi/Documents/Fork_BookManager.py

我知道文件正在运行,因为 Fork_BookManager.py 正在使用selenium打开Web浏览器,我看到这个Web浏览器正在打开 . 从终端运行 Fork_BookManager.py 文件时没有观察到错误 .

在终端执行

crontab -e

使用nano作为编辑器,我首先验证了crontab的实际工作

* * * * * env > /home/pi/Documents/env.output

一分钟后, Documents 文件夹中有一个带有以下参数的env.output文件 .

LANGUAGE=da_DK.UTF-8
HOME=/home/pi
LOGNAME=pi
PATH=/usr/bin:/bin
LANG=da_DK.UTF-8
SHELL=/bin/sh
LC_ALL=da_DK.UTF-8
PWD=/home/pi

我注意到来自crontab的路径与从终端调用env时的路径不同,因为如果我从终端调用env来调用以下路径:/ usr / local / sbin:/ usr / local / bin:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /本地/游戏:在/ usr /游戏

所以我知道crontab -e正在工作,因为否则我不会在Documents文件夹中创建env.output文件 . 我继续从终端调用 crontab -e 并将env中的路径复制到crontab中,如下所示

PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

* * * * * /usr/bin/python3 /home/pi/Documents/Fork_BookManager.py

保存脚本并等待 . 什么都没发生 .

为了总结,我有:

  • 确保 Fork_BookManager.py 是可执行的

  • 已验证crontab正在运行

  • 更新了env到crontab脚本的路径

这是导致crontab按照本指南工作的三大原因https://askubuntu.com/questions/23009/why-crontab-scripts-are-not-working/24527#24527

它仍然没有用 . 我错过了什么?是否有更好的实践来实现我想要的,即每分钟执行一次python脚本而不直接从python脚本本身执行它,例如带有 time.sleep(60) 的while循环

附加信息

我甚至尝试在crontab脚本中扩展路径

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/usr/bin:/home/pi/Documents

试图指定python3和 Fork_BookManager.py 在哪个文件夹中 . 仍然没有运气 .