【问题标题】:Using Cron Job to run a python programs使用 Cron Job 运行 python 程序
【发布时间】:2021-08-25 20:10:04
【问题描述】:

我正在尝试使用 cron 运行 python 程序。 最初我尝试使用 cron 在 python 中运行网络爬虫,但我很快意识到出了点问题。 因此,我尝试分解该过程以查看错误在哪里。 我发现 cron 实际上不会运行任何比 print("Hello World")

对于初学者,我正在尝试使用 cron 运行此代码:

import pandas as pd
import os
import sys

sys.stdout = open("/home/pi/testbot/crontask.txt", "w")

df = pd.read_excel('db.xlsx', engine='openpyxl')
print(df)

sys.stdout.close()

我希望程序读取一个 .xlsx 文件并将输出写入一个名为 crontask.txt 的文件中。

转折来了。

当我运行命令python3 testbot.py 我得到了正确的结果,以及 crontask.txt 中的内容。

但是当我将 * * * * * /usr/bin/python3 /home/pi/testbot/testbot.py >> /home/pi/testbot/log.txt 添加到 crontab 时,我在 log.txt 中得到零个结果和零个日志条目。

我尝试使用chmod +x testbot.py 使 .py 文件成为可执行文件,但没有运气就更改权限。

我开始怀疑运行此类程序的唯一方法是制作一个运行该程序的脚本并在其上使用 cron 作业。 这是我唯一的解决方案吗?

【问题讨论】:

  • 从您写的内容来看,我清楚地看到了一个错字:您的testbot.py 文件路径中有一个空格。
  • 另外,您可以/应该查看您的系统日志/var/log/<somewhere-here-around>.log 以查看 cron 是否在抱怨什么。
  • @Brandt,是的,这只是一个错字,我不得不检查两次。谢谢你的通知!
  • 并且,作为最佳实践说明,我建议您让 cron 调用一个非常简单的 shell 脚本,而无需从您家中的“cron_scripts”文件夹中获取参数。该脚本将调用您的 python 脚本并执行任何必要的环境/日志设置。您可以从这种方法中获得许多优点:首先,它使您的 crontab 简洁明了,其次,除了任何环境/设置之外,您还可以使用它(例如“call_textbot.sh”)来记录工作;)
  • 最后但同样重要的是,了解 *nix 命令的原理(正确完成一件事)可以帮助您了解这样的“最佳实践”:不要将复杂调用的负担推到 cron 的背上,它旨在定期调用脚本。时期。而且它确实做得非常好。

标签: python cron raspberry-pi


【解决方案1】:

我确实解决了这个问题,但令人尴尬的是,我仍然想发布这个问题,以防其他人遇到同样的问题。

由于 cron 不使用任何特定路径,您必须指定所有内容才能执行打开任何文件夹/文件或其他程序的程序。 不仅在 crontab 中,而且在程序本身中。 就我而言,是 df = pd.read_excel('db.xlsx', engine='openpyxl') 导致了错误,所以当我将其更改为 df = pd.read_excel('/home/pi/bot/db.xlsx', engine='openpyxl') 时,它就像一个魅力。

如果您考虑使用 bash 脚本打开另一个程序,情况也是如此。似乎只有直接路径有效。

【讨论】:

    猜你喜欢
    • 2019-06-01
    • 2017-02-16
    • 2022-06-21
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 2015-08-30
    • 2021-11-21
    相关资源
    最近更新 更多