« 平穏 | blog.ps4.jp トップへ | パーフェクト »

2005年06月26日:cronとは クーロンと発音する

cronとは、決まった時間に特定のコマンドを実行させる機能のこと。
応用すれば、指定した日付にあらかじめ書いておいたブログを投稿させることができる。
しかしこれは無料ブログサービスで提供されていることは滅多にない。自分でやるしかないのである
とはいえ、実行させるには少々手間がかかる。もちろんそれに見合うだけのリターンは期待できるのだが。
まずシェルスクリプトを作成し、ディレクトリを指定して実行するコマンドを指定
となにげなく解説を始めると見た目は格好良いが、自分でもイマイチ使いこなせていない。
というのも、Movable Type 3.17では、通常通りcronを走らせると、エラーが返ります。エラー名は以下の一文。
Use of uninitialized value in join or string at lib/MT/Util.pm line 110.
これは要するに文字参照に関するエラーで、日付指定による投稿は一応成功します。が、メールでは「cronに失敗しました」というメッセージが送られてきます。
別に自動投稿自体は成功しているので構わないのですが、成功してるのにエラーを伝えるメールがやってくるのはちょっと気持ち悪いんですよね。なのでパッチを当てることにします。(ちなみにこのバグはシックスアパート社によると、当分直す予定はないそうです)
シックスアパート社の社員さんによるブログでパッチが公開されていました。ですがそのパッチだとどうもエラーがなおんないよ・・・って人がいる模様。なのでカスタマイズ。
//ここからカスタムパッチ開始//

# substring treating HTML character-entity references as single characters
sub substr_wref {
my ($str, $start, $width) = @_;
return undef unless defined $str;
my @character_entities = $str =~ /(&[^;]*;|.)/gs;
$width = @character_entities if $width > @character_entities;
join '', @character_entities[$start..$start+$width-1];
}

//ここまでカスタムパッチ終了//

とりあえずrun-periodic-tasksの最後に上記パッチを書き足して保存→サーバにアップしました。でもエラーメールが返ってくる・・・
しょうがないからメールボックスのフィルタにかけておきました。これでとりあえず、メールが来ても自動でゴミ箱行きですな。

投稿日:2005年06月26日 13:18

トラックバック

このエントリーのトラックバックURL:
http://blog.ps4.jp/cgi-bin/mt-tb.cgi/15