の形で呼ぶ。
//
// anchor_idはフレームを使う場合最低限各フレームごとに設定。お互い他のフレームを書換えたときにへんな干渉をさけるため。
// その他ページの種別毎などで変えてもよいが、あまり小分けにするとcookieが増える。
// 同じanchor_idで保存されるcookieは1セットのみ。でも単独ページ表示のサイトなら概ねこれで充分。
anchor_id = "anc_main";
noanchor = false; // bodyにanchorをしかけたときなど場合によって一時無効にするためのフラグ。
// アンカーの記憶。
function anchor_save(object_id, page_id) {
if(noanchor) { anchor_erase(); return; }
get_scroll();
setcookie(anchor_id+"_pid", page_id, 0);
setcookie(anchor_id+"_st", scroll_top, 0);
setcookie(anchor_id+"_sl", scroll_left, 0);
if(object_id) {
object_top = scroll_top + get_object_top(object_id);
object_left = scroll_left + get_object_left(object_id);
setcookie(anchor_id+"_oid", object_id, 0);
setcookie(anchor_id+"_ot", object_top, 0);
setcookie(anchor_id+"_ol", object_left, 0);
} else {
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
}
// アンカーの適用。
function anchor_apply(page_id) {
if((saved_page_id = getcookie(anchor_id+"_pid")) && page_id != saved_page_id) { return; }
get_scroll();
if((anchor_st = getcookie(anchor_id+"_st")) != "" && (anchor_sl = getcookie(anchor_id+"_sl")) != "") {
anchor_st = parseInt(anchor_st);
anchor_sl = parseInt(anchor_sl);
} else {
anchor_st = scroll_top;
anchor_sl = scroll_left;
}
if((object_id = getcookie(anchor_id+"_oid"))
&& (anchor_ot = getcookie(anchor_id+"_ot")) != ""
&& (anchor_ol = getcookie(anchor_id+"_ol")) != "") {
offset_top = (scroll_top + get_object_top(object_id)) - parseInt(anchor_ot);
offset_left = (scroll_left + get_object_left(object_id)) - parseInt(anchor_ol);
} else {
offset_top = offset_left = 0;
}
window.scrollTo(anchor_sl + offset_left, anchor_st + offset_top);
}
// アンカー消去。あえてとっておく必要がなければanchor_apply()後すぐ消去が望ましい。
function anchor_erase() {
setcookie(anchor_id+"_pid", "", -1);
setcookie(anchor_id+"_st", "", -1);
setcookie(anchor_id+"_sl", "", -1);
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
//-->
倉金家ホームページ
趣味の部屋/サーバー構築メモ
|
|
NFSが繋がり、ユーザの設定が完了したのでさっそくバックアップ用のスクリプトを書いてバックアップをやります。
・前回のバックアップから更新されたファイルのみ上書きする。 ・バックアップの状況は画面に表示すると共にログファイルにも記録する。 ・メッセージとログを極力見やすくする。
ということにします。
|
バックアップ用スクリプト
まずホームページをバックアップするためのスクリプトを書きます。 テキストエディタでsite-backup.shを新規作成し、/rootディレクトリにでもおいておきます。 (site-backup.sh) #!/bin/bash
LOGFILE="/var/log/site-backup.log" function dircopy() { echo "copying from $1 to $2" | tee -a "$LOGFILE" if [ -d "$1" ] then cd "$1" find . -print | cpio -admpv "$2" 2>&1 \ | grep -v "newer or same age version exists" \ | sed "s/\/\.\//\//" \ | /root/pickup_file.sh \ | tee -a "$LOGFILE" echo | tee -a "$LOGFILE" else echo "Can't open $1" | tee -a "$LOGFILE" echo | tee -a "$LOGFILE" fi }
#kuragane.jpのバックアップ SRCDIR="/mnt/home.baba/kuragane.jp" TGTDIR="/home/kuragane.jp" dircopy $SRCDIR $TDTDIR
#....のバックアップ .... という具合。 バックアップログは/var/log/site-backup.logに記録されますが、このとき更新されていないファイルについては、 ... newer or same age version exists ... のメッセージを出して上書きしないのでそれは記録しないようにしてあります。 さらにsedでメッセージを少し整形してさらにファイル名のみを表示させるためのスクリプトpickup_file.shを通し、更新されたファイルのみを表示するようにしていますので非常にわかりやすくなります。 (/root/pickup_file.sh) #!/bin/sh while read path do if [ -f "$path" ] ; then echo "$path" elif [ ! -d "$path" ] ; then echo "$path" fi done
|
バックアップ
rootターミナルからsite-backup.shを実行します。
copying from /mnt/home.baba/kuragane.jp to /home/kuragane.jp ........(更新されたファイル名) ........(更新されたファイル名) 1234 blocks
と表示され、ファイルを見てみるとちゃんとコピーされていました。
めでたしめでたし。
|
あとは同様にその他必要なデータなどのバックアップスクリプトを作ってバックアップ完了。 自動で一日一回バックアップするなどもできますが、さほど更新頻度も高くないので手動でも充分。
|
|
|