プロバイダから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件の返信
コメントは受け付けていません。