2004年07月07日 (水)

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

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

今日はその第一回目。iblogPatcher を用いて blog 公開の度にバックアップを作成する方法です。


この方法は blog を公開する度にバックアップを作成するので、
  • 公開されたものが完全に再現できる。
  • 更新がないときに余分にバックアップすることはない。
という長所があります。私は現在この方法をとっています。短所としては
  • 書きかけエントリや非公開のカスタマイズ途中などの途中経過を保存しない。
といったところでしょうか。しかし途中経過も保存したいときは iBlogFreezer コマンドファイルをダブルクリックして適宜実行させればよいのです。ですから最も無駄が少なく能率的なバックアップタイミングだと考えています。

準備

まず、iBlogFreezer のパス名を確認します。これは iblogPatcher の blog 定義ファイルに書き込むためです。パス名を確認する簡単な方法の一つにターミナルにドラッグ&ドロップするという方法があります。しかし、iBlogFreezer はコマンドファイルなのでドラッグ&ドロップすると実行されてしまいます。そこで次のようにします。
  1. ターミナルを起動する。
    ターミナルウィンドウがオープンされます。以後、このウィンドウに対して操作します。
  2. iBlogFreezer コマンドファイルがあるフォルダーをターミナルウィンドウにドラッグ&ドロップする。
    そうすると、そのフォルダーのフルパスがターミナルウィンドウに書き込まれます。ただし、これはターミナル上でディレクトリ(フォルダ)を表記するときの書き方になっています。
  3. ターミナルウィンドウに書き込まれたフォルダーのフルパスをコピーしておく。
    スティッキーズなどにコピーしておけばよいでしょう。
  4. スペースなどの前に付いた \ (バックスラッシュ) を取り除く。
    ターミナルの「コマンドライン」に直に書くときは必要なのですが、書き写す先では必要ないので \ は取り除きます。
  5. 後ろに /iBlogFreezer を追加する。
    コピーしたフィルダーのフルパスの後ろにスペースなどを挟まず続けて "/iBlogFreezer" と書いておきます。( " " は不要です)

blog 定義ファイルへ追加

OPEN_FILES.plugin を使用して公開後に iBlogFreezer をオープンするというアイデアです。このオープン動作はファインダーでダブルクリックしたときの動作ですから、公開後に iBlogFreezer をダブルクリックするのを自動で行うのと同じことになります。

設定の具体例は blog 定義ファイルのサンプルの 最新版 の 205-206 行目を見てください。当該部分は「準備」で確認した iBlogFreezer のパス名を用いて次のように書くことができます。

# バックアップを行う
'iBlogFreezer のパス名',
サンプルではパス名の中のホームまでの部分を環境変数というものを用いて短絡させています。もし iBlogFreezer をホームの下のどこかに置いているのでしたら次のようにします。
# バックアップを行う
"$ENV{'HOME'}/iBlogFreezer のホームからの相対パス",
前者は ' ' (シングルクォーテーション)で囲っていますが、後者は " " (ダブルクォーテーション)で囲っていることに注意してください。シングルクォーテーションで囲うと $ENV{'HOME'} の部分が展開されません。

ターミナルウィンドウが開かれないようにするには

以上で一通りの解説は済んだのですが、この方法ですと新たなターミナルウィンドウが出てきて煩わしいかもしれません。iblogPatcher から直接 iBlogFreezer を実行すると新たなウィンドウを出さずにこっそり実行することができます。

これには次のような行を blog 定義ファイルに書き加えます。

# iBlogFreezer を直接実行する
system('iBlogFreezer のパス名');
書き加える場所は preview > after > onFinish の OPEN_FILES::OnFinish(@_); の直後に入れるのがよいでしょう。OPEN_FILES.plugin は指定されたファイルをオープンするところまで実行して、オープンされたファイルの終了を待たずに次に進みます。Ping 用のロケーションファイルをオープンした場合、Ping と並行してバックアップがとれます。環境変数 $ENV{'HOME'} を用いて短絡させることもできます。「blog 定義ファイルへ追加」で書いたのと同じように iBlogFreezer のパス名の部分(クォーテーションも)書き換えてください。

この方法は実際には試したことがないので「こうすればよいはずだ」というステータスです。後述のこの方法に関することも動作を脳内シミュレーションした結果です。

エラーが報告されることがある

この方法、特に iBlogFreezer を直接実行する方法では iBlogFreezer (の中の tar コマンド)がエラーを報告することがあります。報告の内容は iBlog がその Logs フォルダーに保存する Publish.txt ファイルがバックアップ実行中に書き換えられたというものです。iBlog は最後の公開動作によって何をコピーしたのかをこのファイルに記録します。iBlogFreezer の実行タイミングが早すぎる(逆に言えば iBlog の書き込みタイミングが遅すぎる)と、バックアップ途中に iBlog がこのファイルを書き換えてしまうのです。

しかし、これはバックアップ全体が失敗したことを意味しません。そのファイルだけがうまくバックアップできていないかもしれないという報告なのです。そして Publish.txt は単なるログファイルなのでもしこのファイルが中途半端な状態で問題になる場合は削除してしまえば、iBlog は公開時に新たに作ってくれます。ですから、上のような意味のエラーレポート(英語)がされてもあまり気にしなくてもよいです。


Posted: 21:55    | Comment | Trackback


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