バリューサーバーのcronでMovabletypeの再構築を自動化できない

バリューサーバーのcronでMovabletypeの再構築を自動化できない

昨日はバリューサーバーでMovabletypeの再構築を行うスクリプトの動作を確認できたので、)あとはcronにそのスクリプトを登録し、毎日自動的に再構築をしようとコントロールパネルの「CRONジョブの設定・編集」に登録しました。

ところが実行されていない!?あれ??なんで??

ヘテムルの時は実行が成功したのか、エラーが出ているのかメールが届いていたのですが、メールも届かず、cronが動いているのかどうなのか、さっぱりわかりません。サポートも期待できないので、自己解決するためにいろいろ調べました。

crondの動作状況を調べる

cronを使用するためにcrondというやつが動いていないといけないみたいで、Tera Termを使ってレンタルサーバーにSSHで接続し、以下のコマンドで調べます。

# /etc/rc.d/init.d/crond status

すると、

crond (pid  *****) is running...

と返ってきたので、どうやらcronは動いているみたいです。

もし、cronが動いていなかったら

/etc/rc.d/init.d/crond start
再起動の場合は
/etc/rc.d/init.d/crond restart

crontab -lでcronジョブの登録状況を調べる

SSHで以下のコマンドを打つ

crontab -l

すると「CRONジョブの設定・編集」に登録した内容が表示されました。

ちゃんと登録されているみたいです。

じゃあなんで動かない!?

昨日はSSHからcronで登録したファイルでちゃんとrebuild-pagesを実行することができたのになんで?まだ何かエラーがあるの?

とういうことで、cronで登録のファイルが実行されたときにどうなっているのかを知るために、今度はエラーメールが届くような方法がないか探したところcrontab -ecrontab -lで表示されたリストにMAILTO="[email protected]"と宛先を入れればいいようです。(※contab -rと打つとジョブが削除されますので隣同志のerを打ち間違えないように注意)

crontab -eでMAILTOを追加する

crontab -e

と打つとviエディタが起動し、crontab -lで表示された内容が出てくるので、一番上の行にメールの宛先を入力します。

ただし、Linuxに慣れている方はご存知だとおもいますが、viエディタの操作は普通に文字を入力するようにできませんので注意。

ちなみにTera Termでは以下できました。

  1. iを押し入力モードにする
  2. カーソルで移動して最初の行を改行し、そこにMAILTO="[email protected]"と入力
  3. ESCを押して入力モードから出る
  4. :wq と打つと保存して終了

そして、ちゃんと保存できているかはcrontab -lで確認できます。

cronを実行してみる

バリューサーバーのコントロールパネルの「CRONジョブの設定・編集」に2分後の時刻を設定してみましたが、設定の反映に1時間程度かかるようで、待っていられないので、SSHからcrontab -eで2~3分後の時間を設定してみました。

すると、メールキター!!でもエラー!!

BEGIN failed--compilation aborted at /virtual/user-dir/bin/lib/perl5/Web/Scraper.pm line 10.
Compilation failed in require at ./tools/rebuild-pages line 14.
BEGIN failed--compilation aborted at ./tools/rebuild-pages line 14.

/Web/Scraperの10行目を見る

use HTML::TreeBuilder::XPath;
とある。ですが、HTML::TreeBuilder::XPathはインストールしてやったはず...。もしかして、HTML::TreeBuilder::XPathがどこにあるかわからないよいう意味でパスを入れてやればいいのかな?ということで、パスを挿入。
use lib ("/virtual/user-dir/perl5/lib/perl5");
use HTML::TreeBuilder::XPath;

rebuild-pagesの14行目を見る

/mt/tools/の中にあるrebuild-pagesを開くと

use Web::Scraper;

とある。前回、これもパスを追加して対策したはず...。Web::ScraperHTML::TreeBuilder::XPathがないと動かない。ここにもHTML::TreeBuilder::XPathのパスがいるのかな?何故かWeb::ScraperHTML::TreeBuilder::XPathの保存されている場所がそれぞれ違う(多分インストールをミスった)。

ということで、rebuild-pagesHTML::TreeBuilder::XPathのパスを追加。

#追加前
use lib ("$FindBin::Bin/../lib", "$FindBin::Bin/../extlib", "/virtual/user-dir/bin/lib/perl5");

#追加後
use lib ("$FindBin::Bin/../lib", "$FindBin::Bin/../extlib", "/virtual/user-dir/bin/lib/perl5", "/virtual/user-dir/perl5/lib/perl5");

そしてもう一度cron実行

キター!!メールにsuccessの文字

rebuilding (星屋工作室ブログ ...
Individual built success.

無事、毎日cronでMovabletypeの再構築が自動化されました。

ただ、バリューサーバーは3分以上かかるスクリプトはダメみたいなので、全部の再構築をするのに時間が足りないため、インデックスやアーカイブページの再構築を個別に行うよう、cronジョブを複数に分けました。また、複数のジョブの間隔は1時間空けないといけないみたいなので、1時間5分間間隔で連続してcronを実行するようしました。