4

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

4

3 回答 3

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不再使用该模块)。尝试使用更新的版本:)

于 2012-05-22T15:45:46.233 回答
3

这是一个较老的问题,但仍然相关 - 我只花了 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
于 2016-04-04T20:49:20.017 回答
2

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

于 2016-12-13T16:29:38.763 回答