| | |

coreserverのバックアップ方法変更(その2)

その1で、coreserverの/backup/内にバックアップ対象ファイルが保存されるようになったので、Raspbery Piを使って、家のHDDに移すようにしました。
まずは、ファイルをゲットするphp(get_backup.php)

$dir_hdd1 = "/mnt/hdd1/backupfolder/";
$org_serv = "xxx.coreserver.jp";
$org_user = "loginnname";
$org_pass = "yourpassword";
$date_today = date("Y-m-d") . "/";
$blogs = array("","blog1/","blog2/");

//バックアップ先にフォルダ(フォルダ名は日付)を作成
foreach($blogs as $blog){
$target = $dir_hdd1 . $date_today . $blog;
if (file_exists($target)){
echo $target . " already exists.\n";
} else {
if (mkdir($target, 0777, true)){
echo "Made " . $target . ".\n";
} else {
echo "Failed to make " . $target . ".\n";
}
}
}

// 接続を確立します。できなければ終了します。
$conn_org = ftp_connect($org_serv) or die("Couldn't connect to $ftp_server");

// ログインを試みる
if (@ftp_login($conn_org, $org_user, $org_pass)) {
echo "Connected as $org_user@$org_serv\n";
} else {
echo "Couldn't connect as $ftp_user\n";
}

//メインとブログ用のサブフォルダを順番に巡回してファイルを取得
foreach($blogs as $blog){
if (ftp_chdir($conn_org, "/backup/" . $blog)) {
echo "Current directory is now: " . ftp_pwd($conn_org) . "\n";
} else {
echo "Couldn't change directory\n";
}
// カレントディレクトリの内容を得る
$contents = ftp_nlist($conn_org, ".");

foreach($contents as $file) {
if (mb_strlen($file)>3){
echo $file . ":";
$ret = ftp_nb_get($conn_org, $dir_hdd1 . $date_today . '/' . $blog . "/" . $file, $file, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// ダウンロードを継続する…
$ret = ftp_nb_continue($conn_org);
}
if ($ret != FTP_FINISHED) {
echo "There was an error downloading the file...";
exit(1);
}else{
// ダウンロードが成功したらファイルは削除
ftp_delete($conn_org, $file);
echo $file . " is done!\n";
}
}
}

}

// 接続を閉じる
ftp_close($conn_org);

これで、raspberry piに接続されている外付けHDDに毎日フォルダが作られファイルが蓄積されていきます。ただ、無用に貯めても仕方ないので、過去1年以内の毎月末と直近の数日(指定)分を残して、他は削除するようにしました。(set_backup.php)

//バックアップフォルダ
$dir_hdd1 = "/mnt/hdd1/backupfolder/";

// 保存日数
$days = 3;

// 日付の正規表現
$pattern = "#^\d{4}([/-]?)\d{2}\\1\d{2}$#";

//今日の確認
$date0 = strtotime(date("Y-m-d"));
$month0 = date("m");
echo $date0 . ":" . date("Y-m-d", $date0) . " " . $month0 . "\n";

//バックアップフォルダのファイル一覧の取得
$files = scandir($dir_hdd1, SCANDIR_SORT_DESCENDING);
foreach ($files as $file) {
//正規表現にマッチすれば処理対象にする(本当はディレクトリのチェックも必要)
if (preg_match($pattern, $file, $match)) {
$date1 = strtotime($file);
$month1 = date("m", $date1);
if ((($date0 - $date1) > ($days - 1) * 86400) && $month0 == $month1) {
$target = $dir_hdd1 . $file;
system("rm -rf {$target}");
echo "Deleted " . $file . "!\n";
} else {
echo $date1 . ":" . date("Y-m-d", $date1) . " " . $month1 . ":" . ($date0 - $date1) . "\n";
}
}
}

これらを毎日動かすためのsh

#!/bin/sh
/usr/bin/php /root/script/get_backup.php
/usr/bin/php /root/script/set_backup.php

これをcrontabに登録して毎日動かせば、直近3日分と1年以内の各月末のバックアップが保存されるようになりました。

類似投稿

コメントを残す

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.