エンジニアリングとお金の話

都内で働くエンジニアの日記です。

【技術】cronで困った時の対応について

【SPONSORED LINK】

以前、さくらのレンタルサーバ上で以下のサイトを作成し公開したのだが、レンタルサーバ上では色々と制約が多くDBの要領も500Mまでと少なかったので、お名前.comのVPSサーバへと移設した。

移設したサイト↓
失敗しない為の定番アイテム紹介 | 楽天で見つけたロングセラー商品を紹介します

テレビで紹介された人気の宿案内 | テレビで紹介された大人気の宿を紹介します。芸能人も感動した最高級のおもてなしを是非ご堪能ください。

サイトの移設自体は、2~3時間程度で完了した。なお、このサイトは、バッチにてデータの投稿を行っており、バッチの起動はcronにて行っている。サイトの移設と同時にバッチの移設も行い、crontabに移設前と同様の設定を行った。そしたら、バッチが動かなくなった。

最初は、crondを再起動しないと反映されないのかなと思い、crondを再起動して動作確認を行ったがやっぱり起動しない。色々と悩んだ挙句、google先生を頼りに調査をしていると以下のトピックを発見した。まさに、自分がやりたかった事である。

cron上でのコマンド実行を再現する - Qiita

サイトの内容を基に以下の手順にてcronで実行されている内容をターミナル上で再現してみた。

①crontabに* * * * * env > ~/cron_envを記載し環境変数ファイルを作成
②env - `cat ~/cron_env` cronで起動させたいバッチ名 にてバッチの動作確認

実際に再現してみると、バッチで使用しているPitと言うモジュールでエラーが発生している事が判明した。Pitは~/.pit 以下に保存したアカウント情報を参照する際に使用しているモジュールで、どうもcronにて実行する際は環境変数HOMEにホームディレクトリのパスを設定しないとエラーになるみたいである。

今までもcronには色々と泣かされてきたのだが、ターミナル上で動作を再現できれば解決は早い。ちなみに、envのオプションに『-』をつけて処理を実行すると、環境変数を空の状態で処理を行う事が出来るらしい。cronで悩んでいる人は多いと思うので参考にして頂ければと思う。