从cron运行casper.js脚本

时间:2012-05-22 15:43:04

标签: linux cron casperjs

我正在尝试通过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问题,但不知道从哪里开始!

3 个答案:

答案 0 :(得分:4)

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

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

我的两分钱。

修改

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

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

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

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

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

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

再次修改

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

这是一个较旧的旧问题,但我也在讨论这个问题一段时间了。我不能再通过cron重启Apache(对于Django)(谈论停机时间),这最终成了问题。我没有使用像Jesse Q这样的包装脚本,而是将我的casperjs /幻影增强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

只是进入它,看看你目前的cron PATH是什么。很高兴调试此问题。