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

キャスパースクリプトへの絶対パスを使用する必要があります。たとえば、次のようになります。

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

私の2セント。

編集:

さて、それは少しばかげていました。環境変数phantomjsを設定して、実行可能ファイルへのカスタムパスを設定することもできます。PHANTOMJS_EXECUTABLE

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

次に、通常どおりスクリプトを実行します。

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

ヒント:crontabが別のユーザーとして実行されている場合は、そのcrontabがphantomjsパスにアクセスできることを確認してください。

それが役立つ(そして機能する)ことを願っています。

もう一度編集する

待ってください。取得したスタックトレースは、古いバージョンのCasperJSを使用していることを示しています(たとえば、subprocessモジュールはもう使用されていません)。より新しいバージョンで試してください:)

于 2012-05-22T15:45:46.233 に答える
3

これは古い質問ですが、それでも関連性があります。直接的な解決策を見つけることなく、これを解決するために4時間費やしました。私に起こったことはまったく同じでした。シェルコマンドラインからcasper.jsスクリプトを実行できましたが、cronジョブを介して実行することはできませんでした。NiKoがほのめかしているように、が理解できるほど明確に説明されていないので、キャスパーはPhantomjsが機能するためにどこにあるかを知る必要があります。

Phantomjsbinディレクトリへのパスを含むシェルスクリプトcron_wrap.shを作成しました。

#!/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で拡張されたPATHをcrontabのTOPに追加しました。

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

現在のcronPATHが何であるかを確認するには、vimを使用してください。この問題をデバッグするのに最適です。

于 2016-12-13T16:29:38.763 に答える