【问题标题】:Crontab not working properly but log shows the oppositeCrontab 无法正常工作,但日志显示相反
【发布时间】:2022-02-04 01:13:31
【问题描述】:

我正在开发一个小型 ETL,该 ETL 使用网络抓取收集数据、清理和操作数据,然后发送到本地 sqlite3 数据库。

如果我执行命令 /virtualenv_path/python /script_path/script.py 它运行完美,但如果我用 crontab 安排这个命令它不起作用。

它只是不发送任何数据。但是,我的日志文件显示 crontab 正在按预期使用我的 venv 执行 script.py。

那么,发生了什么?我该怎么做才能解决这个问题?

我想我的脚本是不正确的,因为如果我在没有 crontab 的情况下执行它可以完美地工作,即使使用 crontab 它也不会显示任何错误(正如我所说,日志文件表明一切都很顺利)

这是我的存储库:https://github.com/raposofrct/wescraping-ETL 我们有 ETL 文件夹,其中包含我的脚本、我正在使用的 crontab 命令和我的 sqlite 数据库。

感谢你们能给我的任何帮助或线索。

【问题讨论】:

  • 您是否尝试过在同一个目录中使用另一个脚本,将一行右移到文件中,以检查您的 Cron 条目?
  • “它只是不发送任何数据”——这里的“发送”是什么意思?您使用的是哪个用户的 crontab,该用户是否具有 SQLite 文件的写入权限?你检查过local mail that cron would sent when errors occur吗?
  • @Kendle,是的,而且效果很好。我创建了一个 crontab 命令,该命令创建了一个文件夹并将其删除。
  • @Chris 首先,当我说“不发送数据”时,我说当我加载我的表时,它只显示已经收集的数据,因此没有数据被附加到数据库表中。关于 crontab 用户,我没有指定任何 crontab 用户。我想我需要更深入地检查一下。
  • 尝试在create_engine中使用绝对路径('sqlite:///full/path/to/hm_db.sqlite',echo=False)

标签: python web-scraping cron etl


【解决方案1】:

您的脚本可能正在运行,但它没有将数据放入您正在查看的数据库文件中。 hm_db.sqlite is relative to whatever the current working directory is:

DataBase(dados,create_engine('sqlite:///hm_db.sqlite',echo=False))

这不太可能是您手动运行脚本时所在的目录。提供绝对路径或使路径相对于您的脚本目录,例如

from pathlib import Path


root_directory = Path(__file__).parent
database_file = root_directory / "hm_db.sqlite"

DataBase(dados, create_engine(f"sqlite:///{database_file}", echo=False))

或者,在您现有的脚本中记录 os.getcwd() 以确定您的 cronjob 将数据存储在哪里。

【讨论】:

  • 非常感谢克里斯!我花了大约 6 个小时来思考和搜索这个问题!
  • 核心问题是您的 cronjob 正在某个未知目录中运行。当您的脚本打开hm_db.sqlite 时,它会在该目录中 执行它。第一次运行 cronjob 时,它会创建该文件。随后的运行会更新它。我在上面用pathlib.Path 显示的选项基本上告诉你的脚本打开path/to/script.py/../hm_db.sqlite (1/2)
  • os.getcwd() 返回当前工作目录。该目录应该包含第二个hm_db.sqlite,其中包含您丢失的数据。
  • 你知道我是否可以制作另一个 crontab 来自动添加、提交和推送更改到 github?我的想法是每次收集更多数据时都提供给 github。
  • @FernandoRaposo,你可以,但是在 Git 中跟踪二进制数据块有点反模式。我对您的用例并不完全清楚,因此它可能没什么大不了的,但另一种选择是将数据插入某个云托管数据库中。然后它将存在于您的存储库之外。
猜你喜欢
  • 2017-07-13
  • 2014-03-23
  • 2014-10-31
  • 1970-01-01
  • 2013-12-04
  • 2019-07-02
  • 2013-03-23
  • 2020-12-15
相关资源
最近更新 更多