Cron 作业不能 运行 bash 脚本(shell python 需要 xsession 的脚本)运行 完全可以从控制台

Cron job can't run bash script (that shells python script requiring xsession) that runs perfectly well from console

我在 python 脚本中使用 dryscrape。 python 脚本在一个bash 脚本中被调用,它是由cron 调用的运行。对于那些可能不知道的人,dryscrape 是一个无头浏览器(在后台使用 QtWebkit - 所以需要一个 xsession)。

以下是关于我遇到的问题的要点

  1. 当我从命令行 运行 python 脚本时,它可以工作
  2. 当我从命令行 运行 bash 脚本时,它也有效

我发现这可能与我的命令提示符和 cron 作业 运行ning 之间的不同环境有关,所以我修改了我的 bash 脚本以获取我的 .profile如下:

#/bin/bash

. /full/path/to/my/home/directory/.profile

python script_to_run.py

这是我的 cronjob crontab 条目的样子:

0,55 14-22 * * 1-5 /path/to/script.sh >> $(date "+/path/to/logs/\%Y\%m\%d.mydownload.log" )

顺便说一句,我知道作业正在 运行(我可以在 /var/log/syslog 中看到条目,并且脚本还会写入日志文件 - 这是我收到错误的地方下面留言):

在所有情况下,我都收到以下错误消息:

Could not connect to X server. Try calling dryscrape.start_xvfb() before creating a session

我已经在我的机器上安装了先决条件(显然 - 因为它 运行s 在命令行)。目前,我 运行 没有想法。

什么导致脚本在控制台 运行 正常,然后在 cron 运行 时失败?

[[相关详情]]

Cron 用户没有显示,所以你不能运行任何需要显示的命令。 您需要修改 python 脚本以不使用任何类型的显示(请仔细检查,因为某些 python 命令即使不打开任何显示,也会在内部检查此变量)。 最好的测试方法是在没有显示的情况下通过 ssh 进入机器,并检查你是否可以从那里 运行 它没有错误。

这个问题的解决方案是在开始 dryscrape 会话之前调用 dryscrape.start_xvfb() 方法。