Cron作业无法运行从控制台

时间:2017-01-27 15:22:39

标签: python bash cron qtwebkit dryscrape

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

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

  1. 当我从命令行运行python脚本时,它可以正常运行
  2. 当我从命令行运行bash脚本时,它也可以运行
  3. 我发现这可能与我的命令提示符和cron作业运行时的不同环境有关,所以我修改了我的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中看到条目,并且脚本也会写入日志文件 - 这是我在下面收到错误消息的地方):< / p>

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

      

    无法连接到X服务器。尝试调用dryscrape.start_xvfb()   在创建会话之前

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

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

    [[相关详情]]

    • 操作系统:Linux 16.0.4 LTS
    • bash:版本4.3.46(1)
    • cron用户:我自己(即命令提示符下的同一用户)
    • dryscrape:版本1.0.1

2 个答案:

答案 0 :(得分:0)

Cron用户没有显示,因此您无法运行任何需要显示的命令。 您需要修改python脚本以不使用任何类型的显示(仔细检查,因为一些python命令,即使它们没有打开任何显示,它们在内部检查此变量)。 测试的最佳方法是在没有显示器的情况下ssh到机器中,并检查是否可以从那里运行它而没有错误。

答案 1 :(得分:0)

解决方法是在启动dryscrape会话之前调用dryscrape.start_xvfb()方法。