Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cron作业可以';t运行从控制台运行良好的bash脚本(它炮制需要xsession的python脚本)_Python_Bash_Cron_Qtwebkit_Dryscrape - Fatal编程技术网

Cron作业可以';t运行从控制台运行良好的bash脚本(它炮制需要xsession的python脚本)

Cron作业可以';t运行从控制台运行良好的bash脚本(它炮制需要xsession的python脚本),python,bash,cron,qtwebkit,dryscrape,Python,Bash,Cron,Qtwebkit,Dryscrape,我正在python脚本中使用。python脚本在bash脚本中调用,该脚本由cron运行。对于那些可能不知道的人来说,DrySrape是一款无头浏览器(在后台使用QtWebkit,因此需要xsession) 以下是关于我正在讨论的问题的要点 当我从命令行运行python脚本时,它可以工作 当我从命令行运行bash脚本时,它也可以工作 我发现这可能与命令提示符和cron作业运行时的不同环境有关,因此我修改了bash脚本以获得.profile,如下所示: #/bin/bash . /full/pa

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

以下是关于我正在讨论的问题的要点

  • 当我从命令行运行python脚本时,它可以工作
  • 当我从命令行运行bash脚本时,它也可以工作
  • 我发现这可能与命令提示符和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中看到条目,脚本也会写入日志文件,在这里我会得到下面的错误消息):

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

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

    我已经在我的机器上安装了前提条件(显然,因为它是在命令行上运行的)。目前,我已经没有主意了

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

    [[相关详细信息]]

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

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

    解决方案是在启动DrySrape会话之前调用
    DrySrape.start\xvfb()
    方法。

    cronjob是否设置
    Display
    变量(或者您是
    .profile
    这样做的)不,我不这么认为。请详细说明。。。这听起来像是我之前在一个类似项目中遇到的问题。在运行命令之前,是否需要在我的crontab条目中添加
    export DISPLAY=:0
    ?是否可以从不在X windows会话中的终端运行该命令?(按ctrl+alt+1、ctrl+alt+6或ctrl+alt+7返回xwindows)。可能是DrySrape需要一个xsession)。您确定正在执行python脚本吗?在cronjobs中,您不能期望任何类型的环境可用,因此建议使用完整路径everyhare。@fedorqui是的,python脚本肯定正在运行(它将我在问题中指定的错误写入日志文件),请参阅上面的注释。这可能有助于你进一步澄清情况。