我正在使用 RPI Zerow 运行 python 代码 (Raspbian Strech-Lite)。
我需要在启动时运行 2 个文件:MQTTlogger.py
和Sched_MQTT.py
。两个文件都可以使用命令行正常运行,但是当我添加 2 个作业时,crontab
只有其中一个得到执行(第二个文件)。文件名和路径都正确。
在所有日志文件中搜索/var/log
没有显示启动期间失败的任何证据。
知道为什么吗?
@reboot /usr/bin/python3 /home/guy/github/SmartHome_SoC/MQTTswitches/MQTTlogger.py
@reboot /usr/bin/python3 /home/guy/github/SmartHome_SoC/MQTTswitches/Sched_MQTT.py
EDIT1:仅运行
MQTTLOGGER.PY
只留MQTTlogger.py
incrontab
说明是磨合的问题,crontab
而不是一个接一个的跑。
crontab
文件无法在作业上运行但在命令行上执行时成功的原因是什么?我该如何调试它?
EDIT2:尝试捕获 crontab 错误
@reboot /usr/bin/python3 /home/guy/github/SmartHome_SoC/MQTTswitches/MQTTlogger.py >> /home/guy/crontab.log 2>&1
产量:
File "/home/guy/github/SmartHome_SoC/MQTTswitches/MQTTlogger.py", line 1, in <module>
import paho.mqtt.client as mqtt
ImportError: No module named 'paho'
所以我猜这与 MQTT 包的路径有关
答案1
最有可能的问题是cron
在服务可用之前尝试运行这些作业(一个或两个)。解决此问题的简单方法是添加sleep
延迟以等待所需的服务启动:
@reboot sleep 10; /usr/bin/python3 /home/guy/github/SmartHome_SoC/MQTTswitches/MQTTlogger.py && /usr/bin/python3 /home/guy/github/SmartHome_SoC/MQTTswitches/Sched_MQTT.py
你的问题是类似于这个问题中的一个,因此您可能希望参考它以获取更多信息。
您可能还想将您的内容重定向stderr
到一个文件以捕获任何输出以进行调试。通过将其添加到crontab
我上面列出的行的 和 中来做到这一点:
> ~/cronjoblog 2>&1
答案2
有两件事解决了我的问题:
1)添加sleep
到crontab
- 正如Seamus建议的:
@reboot sleep 10; /usr/bin/python3 /home/guy/github/SmartHome_SoC/MQTTswitches/MQTTlogger.py >> /home/guy/crontab.log 2>&1`
2)修复代码内的路径以修复路径(如stackover flow中要求的),参考