[Mac] launchd で cron のようにディレクトリをバックアップ

Mac には、標準でTime Machine という優れたバックアップツールが入っています。

今回は、Linuxマシンなんかでは、おなじみの cron のようにバックグラウンドで、バックアップをする方法を紹介します。

Mac のターミナルで、cron を使う方法もあるんですが、Mac では、Launchd を使うのがジャスティス!(前回、cron を使った記事を投稿しときながらも)

では早速。

バックアップ用のスクリプトを用意

コードはこんな感じ。

/Users/USERNAME/rsync_backup.sh

#!/bin/sh
mkdir /Volumes/BackupHD
/sbin/mount_afp “afp://192.168.1.100/BackupHD” /Volumes/BackupHD
rsync -av “$1” “/Volumes/BackupHD/rsync_backup/”

説明

  1. ネットワーク上にあるNAS(IP: 192.168.1.100)をマウント
  2. スクリプトの起動時に引数として渡されたディレクトリをNAS上の rsync_backup ディレクトリにコピー(rsync)

Launchd で使用する plist ファイルを作成

/Users/USERNAME/LaunchAgents/org.backup.plist
<?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>org.backup</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/Users/USERNAME/rsync_backup.sh</string>
<string>/Users/USERNAME/Documents/VPC</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/USERNAME/Library/Logs/launchd_rsync.log</string>
<key>StandardOutPath</key>
<string>/Users/USERNAME/Library/Logs/launchd_rsync.log</string>
<key>StartInterval</key>
<integer>25200</integer>
</dict>
</plist>

説明

  1. Label 「org.backup」は適当につけていいです。
  2. ProgramArguments はターミナルの記述に似ています。
    今回の場合…
    /bin/sh /Users/USERNAME/rsync_backup.sh ‘/Users/USERNAME/Documents/VPC’
    を意味しています。
  3. RunAtLoad は起動時に実効するかどうか。
  4. StandardErrorPath、StandardOutPath はログの出力先を指定します。
    今回、rsync コマンドにファイルリストを出力する( -v )を追加しているので、バックアップしたリストがこのログファイルにもりもり出力されます。
  5. StartInterval は繰り返し実行のタイミングを指定します。
    25200 = 7時間(60秒×60分×7時間)を意味しています。

cron とココが違う

cron では、最短1分単位での実行までしか指定できませんが、launchd では、秒単位で指定ができます。
さらに、あるディレクトリを監視させておいて、変化があったら、実効するなんてこともできます。そうすれば、リアルタイムにバックアップも可能ですね。
今回は、そこまでの処理は必要ないかなと思い、省略しちゃいましたが、いずれ書いてみようかと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です