CronジョブのCasperJSとPHPはファイルを開くことができず、手動で実行すると正常に動作します。

CronジョブのCasperJSとPHPはファイルを開くことができず、手動で実行すると正常に動作します。

最近、Ubuntuに新しいDigitalOcean LEMP環境がありました。 CasperJSを使用して外部WebサイトのデータをJSONファイルにスクラップするSHスクリプトと、JSONを解析してMySQLデータベースを更新するPHPスクリプトを作成しようとしています。 SH は cron ジョブによって実行されます。私のcrontabは次のようになり、90分ごとに実行されるようになっています。

# m h  dom mon dow   command
0 0,3,6,9,12,15,18,21 * * * /bin/sh /usr/share/nginx/private/mpd_calls_for_service/scrape_mpd_calls_cron.sh
30 1,4,7,10,13,16,19,22 * * * /bin/sh /usr/share/nginx/private/mpd_calls_for_service/scrape_mpd_calls_cron.sh

そして問題のSHファイルは次のとおりです。

#!/bin/sh
/usr/local/bin/casperjs /usr/share/nginx/private/mpd_calls_for_service/scrape_mpd_calls.js
/usr/bin/php /usr/share/nginx/private/mpd_calls_for_service/parse_json_file.php

SSHの端末を介してこれらのコード行を個別に実行しても問題はありません。ただし、SSHまたはCronを介してシェルスクリプトを手動で実行すると、これが発生します。

ファイルを開けませんでした: /usr/share/nginx/private/mpd_calls_for_service/scrape_mpd_calls.js 安全でない JavaScript URL about:blank, URL file:///usr/local/lib/node_modules/casperjs/bin /アクセスしようとしています。ブートストラップ.js。ドメイン、プロトコル、ポートが一致する必要があります。

安全でないJavaScriptは、URL file:///usr/local/lib/node_modules/casperjs/bin/bootstrap.js フレームから about:blank URL フレームにアクセスしようとします。ドメイン、プロトコル、ポートが一致する必要があります。

入力ファイルを開くことができません:/usr/share/nginx/private/mpd_calls_for_service/parse_json_file.php

過去2日間に試した解決策は次のとおりです。

  1. 影響を受けるすべてのファイルに対してCHMOD 777を実行します。
  2. sudoing時にcrontab -eを編集します。
  3. npm -g から PhantomJS と CasperJS を再インストールします。

多くの試みの終わりに行き止まりの路地に達し、今は髪を引く準備ができました。コミュニティのどんな助けにも感謝します。

答え1

私は&&を含む単一のcrontab行とbash -l -cステートメント内でコマンドを実行していました。

答え2

これも理解する必要がありますが、少なくともcasperjsを実行するには、シェルをログインシェルにロードするときにロードできる変数が必要です。私の場合、私のコンピュータの$ PATHにすでに設定されているので、スクリプトからcasperJSパスをハードコードしたくありませんでした。これにより、crontab(または私の場合はANT)でシェルを作成すると、.rcファイルがロードされないため、パスがないことがわかりました。これに加えて、casperJSはログインシェルにさらに多くの変数を提供する必要があるかもしれません。これがbash -l -cbashをログインシェルにロードする方法です。

関連情報