前回の記事では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/LaunchAgents
にbackup.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
を指定しています。