2004年07月15日 (木)

iBlogFreezer を自動的に実行する(その4)

iBlog のデータや設定、iblogPatcher の設定をバックアップするコマンド iBlogFreezer を自動的に実行する、つまりバックアップを忘れない、方法を幾つか紹介していきます。

今日はその第四回目、最終回です。第三回目のバリエーションです。


概要

前回は cron という UNIX 由来の仕掛けを利用して Mac OS X を起動するときに iBlogFreezer を実行してバックアップをとる方法を紹介しました。このとき、cron の設定として次のような行を crontab コマンドを使って書き足しました。

@reboot	iBlogFreezerのパス名

この @reboot というのが「起動時に」という意味を持っています。ここを変えることによって様々なタイミングで iBlogFreezer を実行できるのです。

このエントリでは、cron の設定自体は前回のエントリを参照していただくとして、@reboot に相当するところのバリエーションを紹介します。


略記の色々

@reboot という書き方は実は略記法で、Mac OS X の crontab コマンドのマニュアル以外では私はお目にかかったことがありません(不勉強なだけかもしれません、BSD 系の UNIX に共通かもしれません)。本当のというか基礎的な書き方は後述しますが、まずはこの略記法を紹介します。

略記法 説明
@reboot Mac OS X の起動時に一度だけ実行されます。
これは前回紹介したタイミングです。
@yearly 毎年 1 月 1 日の午前零時丁度に実行されます。
年に一度ということですから、バックアップのタイミングとしては頻度が少な過ぎますね。
@monthly 毎月 1 日の午前零時丁度に実行されます。
月に一度ということですから、バックアップのタイミングとしてはちょっと頻度が少な過ぎますね。
@weekly 毎週日曜日の午前零時丁度に実行されます。
週に一度ということですから、このあたりからバックアップのタイミングとして許容範囲に入ってきます。何か事故があったとき最大一週間前の状態にまでは回復できますが、この状況を想像して泣きそうになる人はもっと頻繁な指定がよいですね。
@daily 毎日午前零時丁度に実行されます。
バックアップの頻度としては大体妥当な線だと思います。ただ、毎日エントリする人はともかく数日に一度とか一週間に一度というペースの人はちょっと頻繁過ぎますね。
@hourly 毎時 0 分に実行されます。
これはいくらなんでも普通は頻繁すぎるでしょう。
他にも @annually, @midnight というのがありますが、それぞれ @yearly と @daily と同じ結果になります。

もっと詳しい指定

略記法ではなく基礎的な -- これは論理的に基礎的ということで簡単というニュアンスはありません -- 指定方法を説明します。定期的に iBlogFreezer を実行する場合、ほとんどこのやり方でカバーできます。

@reboot に相当する部分の詳しい書き方は次の書式を使用します。

分指定 時指定 日指定 月指定 曜日指定
それぞれの指定の間はスペースまたは TAB で区切ります。各指定は次の値を指定できます。
指定
分指定 0 から 59
時指定 0 から 23
日指定 1 から 31
月指定 1 から 12、または英語の月名の最初の三文字(大文字小文字はどちらでもよい)
曜日指定 0 から 7 (0 と 7 は日曜日を指す)、または英語の曜日名の最初の三文字(大文字小文字はどちらでもよい)

どの指定も * で、そこは指定しないとすることができます。例えば月指定を * とすることで「毎月」という意味になります。

また、どの指定も ,(カンマ) によって列挙指定ができます。例えば曜日指定に 1,3,5 と書くと「月曜日と水曜日と金曜日」という意味になります。

更に、どの指定も -(ハイフン) によって範囲指定ができます。例えば時指定に 9-17と書くと「9時 から 17時まで(17時を含む)」という意味になります。この範囲指定の後ろに / と書くことで「スキップ数」を付加して指定できます。例えば 9-17/2 とすると「9時 から 17時まで(17時を含む) 2 時間毎」という意味になります。これは列挙指定を使って 9,11,13,15,17 と書いたのと同じ結果をもたらします。月や曜日に名前を使うときは範囲指定できません。

列挙指定も範囲指定も普通の指定も組み合わせることができます。例えば時間指定に 9-11,13-17 と書くと「9時 から 11時 まで(11時を含む)と 13時 から 17時 まで(17時を含む)」という意味になります。このように組み合わせて細かい指定ができますが、複数の指定をこういう複合型の指定にしようとしてややっこしくなってきたら、いっそうのこと複数行に分けた方が後から変更するときも悩まなくて済みます。過ぎたるは及ばざるがごとしですね。

例として上に列挙した略記法をこの形式に置き換えてみましょう。

略記法 言い換え
@reboot (言い換え方法はありません)
@yearly 0 0 1 1 *
@monthly 0 0 1 * *
@weekly 0 0 * * 0
@daily 0 0 * * *
@hourly 0 * * * *

応用アイデア

cron による定期的な処理がいかに強力かおわかりいただけたでしょうか? 例えば家族への誕生日おめでとうメールを自動的に送信するなんてことにも使えますし、ファイアーウォールのログファイルを毎分解析して DoS 攻撃を検知したら攻撃元からのアクセスを遮断するというプロのようなことにも使えます。シェルスクリプトや Perl スクリプトと組み合わせることによって高度なことが比較的容易にできるのです。

例えば iBlogFreezer を次のようなロジックで起動するスクリプトを作ったとします。
iBlog が現在起動されておらず、
iBlog のデータファイル達の最終更新日時のうち最も新しいものが最後のバックアップファイルの作成日時よりも後の場合に、
iBlogFreezer を実行する。
タイミング指定を 0,30 * * * * としてこのスクリプトを実行すると、iBlog を使用しておらず最後のバックアップが古くなっているかどうかを 30 分毎にチェックして、自動でバックアップをとってくれます。

今回で iBlogFreezer の自動実行シリーズを終了します。いかがでしたでしょうか? とくに今回のエントリでターミナルを通した UNIX 系のコマンドやスクリプトを使いこなすとアイデアと努力次第で無料で凄い機能を自分の Mac に付加することができるというのがおわかりいただけたのではないでしょうか? 私は Mac OS X が登場する以前は Window や Mac OS のような GUI 前提の OS において、自動処理や大量のデータやファイルの処理をそのときどきの要求や目的によって手軽にできないことに不満を持っていました。UNIX 系の OS は小さな道具を組み合わせることによってこういうことが柔軟に、特別なソフトウェアをダウンロードして導入することなしにできていたのです。Mac OS X の登場でこの両方を兼ね備えたプラットフォームを手にすることができました。根っからの Mac ユーザでない私がここ何年も Mac をメインに据えて使っている理由の一つがこれなのです。

Posted: 11:56    | Comment | Trackback


以下、類似エントリです。