プロバイダからVPSから緊急メンテナンスとして、サーバーの再起動をしましたって連絡があって、あぁそうだったんだぁと思いきや、Apacheを自動起動しないようにしていたのでWebが止まったままでした。
あはは。
そういえば、サーバーのバックアップをするスクリプトで、もしVPSがこけていたら携帯へメールするような仕組みを考えました。
なんてことはないのですが、自宅に年中動かしているWindowsクライアントがあるわけで、そいつにVPSからサーバー内のバックアップデーターを取ってきてもらいます。
ほんとは自宅のもFreeBSDやdebianがいいのですが、万一の際に家族で私以外に操作できる人がいないのも、リスクなのかなぁと思う今日この頃です。
とりあえず、gnuのwgetあたりを入れておき、サーバーからデーターを取ってきます。
[wget_file_daily.cmd] @echo off cd C:\www.kenti.jp del *.tar.gz wget ftp://[サーバーアドレス]/kentijp_allbackup.tar.gz
取ってきたら、曜日ごとにフォルダ分けしてます。
Windowsのcmdで曜日を求めるのは、こちらのページにあるバッチで日付の操作を参考にさせていただきました。
あらかじめ、01_mon , 02_tue… なんて曜日ごとのフォルダを作っておき、ダウンロードしたファイルを各々のフォルダへ振り分けます。
[copy_file_daily.cmd]
@echo off
REM 日付の曜日を求める
REM 日付はYYYY/MM/DD 形式とする。結果は環境変数 yobi へ返す。
REM 引数がないときは本日とする。
cd C:\www.kenti.jp
if "%1"=="" ( 
for /F "tokens=1" %%a in ('date /t') do set orgdate=%%a
) else (
set orgdate=%1
)
:年月日の分割
set yy=%orgdate:~0,4%
set mm=%orgdate:~5,2%
set dd=%orgdate:~8,2%
:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100
if %mm% LEQ 2 (set /a yy=yy-1&&set /a mm=mm+12)
set /a ans=yy + yy/4 - yy/100 + yy/400 + (13*mm+8)/5 + dd
set /a ans=ans %% 7 
echo set day=日月火水木金土 >day.bat
echo set yobi=%%day:~%ans%,1%% >>day.bat
call day.bat
del day.bat
echo %yobi%
echo %date% %time% %yobi% >>dailylog.txt
if %yobi%==月 goto mon
if %yobi%==火 goto tue
if %yobi%==水 goto wed
if %yobi%==木 goto thu
if %yobi%==金 goto fri
if %yobi%==土 goto sat
if %yobi%==日 goto sun
goto end
:mon
copy /y .\*.gz .\01_mon\ >>dailylog.txt
if ERRORLEVEL 1 goto abend
goto end
:tue
copy /y .\*.gz .\02_tue\ >>dailylog.txt
if ERRORLEVEL 1 goto abend
goto end
:wed
copy /y .\*.gz .\03_wed\ >>dailylog.txt
if ERRORLEVEL 1 goto abend
goto end
:thu
copy /y .\*.gz .\04_thu\ >>dailylog.txt
if ERRORLEVEL 1 goto abend
goto end
:fri
copy /y .\*.gz .\05_fri\ >>dailylog.txt
if ERRORLEVEL 1 goto abend
goto end
:sat
copy /y .\*.gz .\06_sat\ >>dailylog.txt
if ERRORLEVEL 1 goto abend
goto end
:sun
copy /y .\*.gz .\07_sun\ >>dailylog.txt
if ERRORLEVEL 1 goto abend
goto end
:abend
echo file not download! >>dailylog.txt
cscript mailsend.vbs
:end
ここで、曜日ごとフォルダへファイルのコピーに失敗した場合(すなわち、wgetでファイルがダウンロードできていなかった場合)エラーとして dailylog.txtにログを残し、なおかつメールを送信するようなWSHを作成しておくと、バックアップができなかった際の異常発見が早くなると思います。
[mailsend.vbs]
Option Explicit
Sub mail_send()
Dim oMsg
Dim schemas
Set oMsg = CreateObject("CDO.Message")
schemas = "http://schemas.microsoft.com/cdo/configuration/"
oMsg.From = "example@hogehoge.ocn.ne.jp"
oMsg.To = "携帯メールアドレス"
oMsg.cc = "CCで送りたいメールアドレス"
oMsg.Subject = "kenti.jp : Backup File Download FAIL!"
oMsg.TextBody = "Backup File Download FAIL!" & vbCrLf & "Please Check ASAP!" & vbCrLf & Now
oMsg.Configuration.Fields.Item(schemas + "sendusing") = 2
oMsg.Configuration.Fields.Item(schemas + "smtpusessl") = false
oMsg.Configuration.Fields.Item(schemas + "smtpauthenticate") = 1
oMsg.Configuration.Fields.Item(schemas + "sendusername") = "username"
oMsg.Configuration.Fields.Item(schemas + "sendpassword") = "password"
oMsg.Configuration.Fields.Item(schemas + "smtpserver") = "smtp.vc*******.ocn.ne.jp"
oMsg.Configuration.Fields.Item(schemas + "smtpserverport") = 587
oMsg.Configuration.Fields.Update
oMsg.Send
End Sub
mail_send
上記は、インターネット回線にOCNを使用していて、OCNのメールアドレスから送信する場合の例です。ご参考まで。
daily.logには、バックアップが完了したり失敗すると、こんな風に記録が残るでしょう。
[daily.log] 2012/12/07 4:40:00.13 金 .\kentijp_allbackup.tar.gz 1 個のファイルをコピーしました。 2012/12/08 4:40:00.13 土 .\kentijp_allbackup.tar.gz 1 個のファイルをコピーしました。 2012/12/09 4:40:00.10 日 .\kentijp_allbackup.tar.gz 1 個のファイルをコピーしました。 2012/12/10 4:40:00.11 月 .\kentijp_allbackup.tar.gz 1 個のファイルをコピーしました。 2012/12/11 4:40:00.42 火 .\kentijp_allbackup.tar.gz 1 個のファイルをコピーしました。 2012/12/12 4:40:00.10 水 .\kentijp_allbackup.tar.gz 1 個のファイルをコピーしました。 2012/12/13 4:40:00.10 木 .\kentijp_allbackup.tar.gz 1 個のファイルをコピーしました。 2012/12/14 4:40:00.10 金 .\kentijp_allbackup.tar.gz 1 個のファイルをコピーしました。 2012/12/15 4:40:00.11 土 .\kentijp_allbackup.tar.gz 0 個のファイルをコピーしました。 file not download! 2012/12/16 4:40:00.40 日 .\kentijp_allbackup.tar.gz 0 個のファイルをコピーしました。 file not download!
まぁ、こんな感じで取り急ぎはバックアップが取れてます。
Windowsのcmdファイルも頑張ればなんとかなる…でもやっぱり、/bin/sh でスクリプト書いた方がなんだか幸せな気がします。
最後に、PCへ保存したバックアップは、必ず別メディアへ保管しましょう。
今日はこれにておしまい。

“VPSサービスが再起動してたとか、サーバーのバックアップを取ることとか” への1件の返信
コメントは受け付けていません。