【问题标题】:Running a casper.js script from cron从 cron 运行 casper.js 脚本
【发布时间】:2012-05-22 15:43:04
【问题描述】:

我正在尝试通过 cron 运行 casper.js 脚本。当我手动运行脚本时一切正常,但是当我通过 cron 运行它时,我收到以下错误:

Traceback (most recent call last):
 File "/usr/local/bin/casperjs", line 46, in <module>
   status = subprocess.call(CASPER_COMMAND)
 File "/usr/lib/python2.6/subprocess.py", line 480, in call
   return Popen(*popenargs, **kwargs).wait()
 File "/usr/lib/python2.6/subprocess.py", line 633, in __init__
   errread, errwrite)
 File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child
   raise child_exception
OSError: [Errno 2] No such file or directory

我的 crontab 条目是:

30 9 * * * /usr/local/bin/casperjs lib/fsaupload.js arg1 arg2 arg3

我也试过

30 9 * * * python /usr/local/bin/casperjs lib/fsaupload.js arg1 arg2 arg3

这给了我相同的结果。有任何想法吗?我猜这可能是path 问题,但不知道从哪里开始!

【问题讨论】:

    标签: linux cron casperjs


    【解决方案1】:

    您可能应该使用 casper 脚本的绝对路径,例如:

    30 9 * * * /usr/local/bin/casperjs /absolute/path/to/lib/fsaupload.js arg1 arg2 arg3
    

    我的两分钱。

    编辑:

    好吧,这有点傻。您还可以通过设置PHANTOMJS_EXECUTABLE 环境变量来设置phantomjs 可执行文件的自定义路径:

    $ export PHANTOMJS_EXECUTABLE="/path/to/phantomjs"
    

    然后像往常一样运行你的脚本:

    /usr/local/bin/casperjs /absolute/path/to/lib/fsaupload.js arg1 arg2 arg3
    

    提示:如果您的 crontab 以其他用户身份运行,请检查它是否可以访问 phantomjs 路径。

    希望它有所帮助(并且有效)。

    再次编辑

    等等,你得到的堆栈跟踪表明你正在使用旧版本的 CasperJS(例如,subprocess 模块不再使用)。尝试使用更新的版本:)

    【讨论】:

    • 嗯……还是什么都没有。我仍然得到同样的错误。我什至也尝试过指定 Python 的完整路径,但仍然没有骰子。有什么想法吗?
    • 如果您尝试使用 --web-security=no 运行,应该可以正常工作吗?
    【解决方案2】:

    这是一个较老的问题,但仍然相关 - 我只花了 4 个小时试图解决这个问题,但没有找到直接的解决方案。对我来说发生的事情完全一样,我可以从 shell 命令行运行 casper.js 脚本,但不能通过 cron 作业。正如 NiKo 提到的,但没有清楚地说明 meget,casper 需要知道 Phantomjs 在哪里才能工作。

    我创建了一个 shell 脚本,cron_wrap.sh,其中包含 Phantomjs bin 目录的路径:

    #!/bin/bash
    PATH=/usr/local/src/phantomjs/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    /usr/local/bin/casperjs --ignore-ssl-errors=true /srv/www/apps/myscript.js
    

    使您的 .sh 可执行文件,现在您可以将脚本添加到 cron:

    00 09 * * * /srv/www/apps/myscript.js
    

    【讨论】:

      【解决方案3】:

      这是一个较老的问题,但我也处理了一段时间。我不能再通过 cron(谈​​论停机时间)重新启动 Apache(对于 Django),这最终成为了问题。而不是像 Jesse Q 使用的包装脚本,我只是将我的 casperjs/phantom-augmented PATH 添加到我的 crontab 的顶部

      PATH=/usr/local/src/phantomjs/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
      /usr/local/bin/casperjs
      

      它现在可以工作了。您可以通过写入 crontab 中的文件来检查您的 cron 环境,如下所示:

      * * * * * env > ~/cronenv
      

      只需 vim 即可查看您当前的 cron PATH 是什么。很适合调试这个问题。

      【讨论】:

        猜你喜欢
        • 2014-11-01
        • 2013-11-26
        • 2018-07-05
        • 1970-01-01
        • 2018-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多