前回の記事ではduplicityを使ったバックアップの方法を紹介しました。
 バックアップは,定期的に行ってこそ,その効果を発揮するものです。
 ここでは,MacOS Xの使用を前提として,launchdを使って定期的なバックアップを行う方法について紹介します。

[su_heading]定期的に実行するタスクを登録する[/su_heading]

 MacOS Xが使用している,バックグラウンドで様々なプログラムを実行させるための仕組みです。
 launchdを使うと色々なことができます。しかし,今回は,一定時間ごとにバックアップのためのスクリプトを実行するということを行い,それに必要な範囲だけを説明することにします。

 launchdで定期的なバックアップを行うためには,実行するスクリプトなどの情報を指定しなければなりません。
 これは情報を記入したXMLファイルを作成し,launchctlというフロントエンドに指定することで行います。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>このタスクに付けるラベル</string>
  <key>ProgramArguments</key>
  <array>
     <string>/bin/bash</string>
     <string>-l</string>
     <string>-c</string>
     <string>実行するシェルスクリプトのパス</string>
  </array>
  <key>StartInterval</key>
  <integer>3600</integer>
</dict>
</plist>

 bash-lオプションを付けないと,必要な環境変数が読み込まれず,duplicityがエラーにより動かないので注意しましょう。

 まだ試していないのですが,ユーザーディレクトリの下にあるLibrary/LaunchAgentsというディレクトリに下に,plistという拡張子を付けて配置することで,起動したとき自動的にロードされるとのことです。

 次のコマンドで,このタスクをlaunchdに登録します。なお,上のXMLファイルはユーザーディレクトリのLibrary/LaunchAgentsbackup.plistとして保存したものとします。

launchctl load Library/LaunchAgents/backup.plist

 これで,一時間ごとに,指定したシェルスクリプトが実行されるようになります。

[su_heading]バックアップを行うスクリプトの作成[/su_heading]

 事前に,必要な暗号化鍵を作って登録を済ませておく必要があります。

#!/bin/sh

ulimit -n 2048 # エラーが出て実行されない場合に必要

DUPLICITY=/usr/local/bin/duplicity
SOURCEDIR=バックアップ元のディレクトリ
BACKUPDIR=バックアップ先のディレクトリ

LOG_FILE=duplicityのログを出力するファイル
PASSPHRASE=暗号化鍵のパスフレーズ
export PASSPHRASE

$DUPLICITY --encrypt-key 暗号化鍵のID --log-file "$LOG_FILE" "$SOURCEDIR" file://"$BACKUPDIR"

 原因はよく分かりませんが,ulimitコマンドを入れなければエラーが発生してしまう場合があるようです。1024以上を指定しろと言われるので,余裕をもって2048を指定しています。