我正在尝试通过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
问题,但不知道从哪里开始!
答案 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是什么。很高兴调试此问题。