从cron运行一个casper.js脚本

我试图通过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问题,但不知道该从哪里出发!

Solutions Collecting From Web of "从cron运行一个casper.js脚本"

你应该使用一个绝对路径到你的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进程模块)。 尝试使用更新的版本:)

这是一个老问题,但仍然相关 – 我花了4个小时试图解决这个问题,没有找到一个直接的解决方案。 我发生的事情完全一样,我可以从shell命令行运行casper.js脚本,但不能通过cron作业。 正如NiKo暗示的那样,但是对于我来说没有足够清楚的说明,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 

这是一个较老的,较老的问题,但我也处理了一段时间。 我不能再通过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是什么。 很好的调试这个问题。