Resources

| FileMaker事情 | Tips | 記事 | 製品レビュー | 書評 | つれづれ日記 | Download |


[記事] 2007/10/03

FileMaker Serverバックアップスクリプト公開
あまり親切ではない解説

竹内 康二
text by Koji Takeuchi

注意
以下に簡単な解説を書きましたが、本来このような解説が必要な方向けではありません。あくまでもヒントとしてごらんください。
また、ノーサポートとして公開していますので、問い合わせをいただいてもお答えできません。というよりも、この解説を読んで、解説が足りないと思われる方は、このスクリプトを使用するべきではありません。ご承知おきのほどを...。

■このスクリプトの使い方
0. 拡張子の「.txt」を削除して、fmsadminグループに実行権限を与えます。
  例:$ chgrp fmsadmin fmsbackup.sh
    $ chmod 750 fmsbackup.sh

1. 「set variables」セクションを直接編集し、スクリプトを実行します。
2. または、「set variables」セクションのみをコピペして、設定部分のみを保持する別ファイルを作ります。実行時にはこのファイルを引数に指定することで、同じスクリプトで異なる設定を実行し分けることができます。
  例:$ ./fmsbackup.sh hourly.conf
    $ /usr/local/bin/fmsbackup.sh ~/Documents/daily.conf
  設定ファイルを引数に指定して実行した場合、本体のファイル(fmsbackup.sh)の「set variables」セクションに設定ファイルの内容と異なる設定があったとしても、引数に指定された設定ファイル内の設定内容で上書きされます。

■このスクリプトを定期的に実行するには
1. FileMaker Serverのスケジュール機能を使う
このスクリプトを「/Library/FileMaker Server/Data/Scripts」に置き、「System-Levelスクリプト」スケジュールをFileMaker Server Admin Consoleにて作成します。
引数つきで実行したい場合は、以下のような1行スクリプトを別途用意し、そちらをスケジュールで呼ぶようにすればよいでしょう。(この場合は、本体のスクリプトは「/usr/local/bin」に置き、設定ファイルは「/Users/Shared」に置いていますが、いずれのファイルもfmserverユーザあるいはfmsadminグループから読み取り可能な場所に置く必要があります。)
例:
#!/bin/sh
/usr/local/bin/fmsbackup.sh /Users/Shared/daily.conf
exit 0

2. crontabにて定時実行の設定を行う
例:
$ crontab -e
03 * * * * /usr/local/bin/fmsbackup.sh ~/Documents/hourly.conf
30 04 * * * /usr/local/bin/fmsbackup.sh ~/Documents/daily.conf

この例では、毎時03分に「hourly.conf」設定ファイルの内容に従ってスクリプトが実行され、毎日4:30に「daily.conf」設定ファイルの内容に従ってスクリプトが実行されます。
「crontab -e」を実行した瞬間にTerminalのウィンドウを上にスクロールしてしまった人は、別のTerminalウィンドウで「man vi」を実行してみてください。あるいは、単に「:q!」とタイプして、crontabの事は忘れてください。

3. launchdにて定時実行の設定を行う
もしあなたがApple Certified System Administratorなら、launchdを使いましょう。.plistファイルを設定して、「/Library/LaunchDaemons/」以下に「com.example.hourlybackup.plist」のようなファイル名で保存します。そして、このファイルの内容をOSにロードさせます。
例:
$ sudo launchctl -w load /Library/LaunchDaemons/com.example.hourlybackup.plist

ファイルの内容は以下のようなものにする必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key> <string>com.example.hourlybackup</string>
<key>Disabled</key> <false/>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/fmsbackup.sh</string>
<string>/Users/YOURNAME/Documents/hourly.conf</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key> <integer>03</integer>
</dict>
<key>RunAtLoad</key> <true/>
</dict>
</plist>

■スクリプトの実行結果レポートを受け取るには
スクリプトの実行時に、mailコマンドにリダイレクトします。以下のようにすると、実行結果のレポートが(たぶんうるさいぐらい)メールにて送られてきます。
例:
/usr/local/bin/fmsbackup.sh ~/Documents/daily.conf | mail -s "fms backup report" yourname@example.com

■環境設定
「set variables」セクションの変数に適切な値を指定します。以下、指定できる変数を簡単に解説します。

・必須
FileMaker Server Admin Consoleで使われるユーザ名を指定します
user=USERNAME

FileMaker Server Admin Consoleで使われるパスワードを指定します
pass=PASSWORD

公開されているデータベースフォルダの親ディレクトリを指定します
data=/Library/'FileMaker Server'/Data

公開されているデータベースフォルダを指定します
databases="$data"/Databases

バックアップ先のフォルダ名を指定します
backupdir=Databases

バックアップ先フォルダの親ディレクトリを指定します
backups=/Library/'FileMaker Server'/Data/Backups

バックアップ先フォルダのフルパスを指定します(通常は以下の変数指定でいいはず)
backupdatabases="$backups"/"$backupdir"

「fmsadmin backup」コマンドで指定するための、「filemac:」形式のパスを指定します(通常は以下の変数指定でいいはず。HDD名を変更するぐらい?)
backupspath="filemac:/'Macintosh HD'$backupdatabases/"

サブディレクトリもバックアップするかどうか ( y = 1, n = 0 )
subdirectory=1

圧縮ファイルにつける名前を指定します
prefix=servername_fms9

圧縮形式を指定します ( zip/tar.gz )
圧縮や世代管理が不要なら、空欄にしておきます
archive=tar.gz

・圧縮および世代管理関連の設定(オプション)
 バックアップしたDBを「直近xx時間」「直近xx日」「直近xxヶ月」単位で保持し、それ以前のものは自動的に消去します。それぞれ、1時間に1セット、1日1セット、1月1セットが保持されます。「hour」あるいは「day」「month」に保持したい時間数(あるいは日数、月数)を指定し、それぞれについて設定を行います。

保持したい時間数 ( y = n, n = 0 )
hour=72

※「hour」に1以上の値を設定した場合、以下もあわせて設定します

「直近xx時間」を保持するフォルダ名(この例では、「recent_72_hours」という名前です)
hourlydirectory=recent_"$hour"_hours

「直近xx時間」を保持するフォルダのフルパス(通常は以下の変数指定でいいはず)
hourlypath="$backups"/"$hourlydirectory"

保持したい日数 ( y = n, n = 0 )
day=30

※「day」に1以上の値を設定した場合、以下もあわせて設定します

「直近xx日」を保持するフォルダ名(この例では、「recent_30_days」という名前です)
dailydirectory=recent_"$day"_days

「直近xx日」を保持するフォルダのフルパス(通常は以下の変数指定でいいはず)
dailypath="$backups"/"$dailydirectory"

保持したい月数 ( y = n, n = 0 )
month=120

※「month」に1以上の値を設定した場合、以下もあわせて設定します

「直近xxヶ月」を保持するフォルダ名(この例では、「recent_120_months」という名前です)
monthlydirectory=recent_"$month"_months

「直近xxヶ月」を保持するフォルダのフルパス(通常は以下の変数指定でいいはず)
monthlypath="$backups"/"$monthlydirectory"


・別のフォルダへミラーするための設定(オプション)
 冗長化のためのオプションです。外付HDDなどにコピーすることを想定しています。

「直近xx時間」フォルダをミラーするか? ( y = 1, n = 0 )
ext_hourly=0

「直近xx日」フォルダをミラーするか? ( y = 1, n = 0 )
ext_daily=0

「直近xxヶ月」フォルダをミラーするか? ( y = 1, n = 0 )
ext_monthly=0

上記「ext_*」のどれかを1にした場合、以下もあわせて設定します

ミラー先フォルダのフルパス
external=/Volumes/backup_external/fms/


・別のホストへミラーするための設定(オプション)
 冗長化のためのオプションです。ファイルサーバなどにコピーすることを想定しています。
 このオプションを使う場合、転送はSSHで行われますので、転送先のサーバにFileMaker ServerのホストのRSA keyが必要です。

「直近xx時間」フォルダをミラーするか? ( y = 1, n = 0 )
alt_hourly=0

「直近xx日」フォルダをミラーするか? ( y = 1, n = 0 )
alt_daily=1

「直近xxヶ月」フォルダをミラーするか? ( y = 1, n = 0 )
alt_monthly=1

上記「alt_*」のどれかを1にした場合、以下もあわせて設定します

ミラー先ホストのユーザ名
hostuser=root

ミラー先ホストのホスト名 or IPアドレス
host=host.example.com

ミラー先フォルダのフルパス
hostpath=/Volumes/backup_external/foo/fms

Copyright © 2004-2010sevensdoor.com. All rights reserved.