FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ECL2.0 クラウド環境におけるWindowsServer2012R2への新規ディスク追加

クラウドサービスで新規データボリュームを追加したのでディスクをフォーマットしようとしたら何故かエラーになってハマったのでめも。

1.「サーバマネージャのコンピュータの管理」>「記憶域」>「ディスクの管理」
2.追加されたディスク1を右クリックしてフォーマット。規定値通りフォーマットしたのだが「ファンクションが間違っています」と言われてフォーマットできない。
3.ボリュームの名前がついてないことが原因かなぁと思い、ボリューム名を適当に「D」でつける。
4.その後、右クリックして「NTFS」でフォーマット。
5.正常稼動。

ボリューム名は「2」の手順でも命名するためにプルダウンを選ぶ箇所があるので、なぜ先に命名してやるとOKで「2」の手順で命名しようとすると受け付けないのかよくわからないですが、ひとまず回復したからもういいか。

ちなみに「2」で出た「ファンクションが間違っています」でのエラーで検索すると、「データディスクが壊れているのでは?」という教えてgoo等に行き着きます。「いやいやクラウドでそんなんあるわけないだろ…」ってなってハマるので注意。
スポンサーサイト

WindowsServerで現在から1日前の日付をyymmdd形式で取り出すバッチ

はじめに書いておきますが、かなり長いのでがんばってください。
また、こちらの計算方法を得るにあたり様々なサイト様を閲覧したのですが、昔のことすぎて記録がありませんでした。。
参照した後、自分でも色々と手を入れているのですが、何かお気づきの点がございましたらコメントを頂ければと思います。申し訳ありません。


タイトル通りの計算結果を得たいと思ったため、そのバッチファイルを作りました。
その内容を記載し、説明します。

もうご存知かと思いますが、
 echo %date%
このコマンドをコマンドプロンプトに入れると下記のような結果が得られます。
 2015/05/12

echoは値を表示するためのコマンドで、%date%はWindowsの環境変数です。
要するに「echo %date%」は、「環境変数%date%の値を表示しろ」というコマンドなわけです。
この環境変数%date%を使って「1日前」を指定します。
様々なサイト様で記載があると思いますが、私はまず下記のように変数を設定しました。
set dt=%date%
set yy=%dt:~-10,4%
set y2=%dt:~2,2%
set mm=%dt:~5,2%
set dd=%dt:~8,2%


これで下記のような変数が出来上がりました。
 変数dt:環境変数%date%の値を代入
 変数yy:変数dtの1文字目から数えて4文字を取得
 変数y2:変数dtの3文字目から数えて2文字を取得
 変数mm:変数dtの6文字目から数えて2文字を取得
 変数dd:変数dtの9文字目から数えて2文字を取得

たとえば本日が2015/05/12であれば変数は下記のようになります。
 変数dt:2015/05/12
 変数yy:2015
 変数y2:15
 変数mm:05
 変数dd:12

さて、上記の例であれば、そのまま「y2+mm+dd」の「dd」部分の数値を1下げれば「アクセスログ名_150512」を取得できるわけですが、たとえば
 ① 2015年5月1日の前日は?
 ② 2015年1月1日の前日は?
 ③ 2016年3月1日などの閏年のときは?
などなど、例外が入ってくると、単純に「ys+mm+dd」の「dd」の数値を1下げればいいというわけにもいきません。

順に計算を説明します。
まずはじめに、ddの値から1引く計算をします。計算の結果、12日の場合はddの値は11になります。
set /a dd=%dd%-1

しかし、1日の場合はというと、01から1引くわけですから、0になってしまいます。すなわち2桁だったはずの値が1桁に桁落ちしてしまったわけです。これだと2桁の日付の値が取り出せません。ほしいのは、あくまで01、12、31などの2桁の数値です。
そこで、計算が終わったら、00と手前に0を2つ入れてやります。
変数ddの計算結果の値が0の場合は「000」に、1の場合は「001」に、11の場合は「0012」になります。
set dd=00%dd%

ここのddの値の後ろから2文字を取り出します。
set dd=%dd:~-2%

これで、日付から1引いた2桁の数値が取り出せました。

更にここで次の閏年計算のための変数ymodを追加します。
ここでは変数yyを4で割った際の余りの値を取り出します。もし余り0であれば閏年です。
set /a ymod=%yy% %% 4

さて、ここで何個かあった課題を思い出します。

 ① 2015年5月1日の前日は?
 ② 2015年1月1日の前日は?
 ③ 2016年3月1日などの閏年のときは?


たとえば①の場合、上記までの計算結果で変数ddは00になっていますが前日は30日です。また、月数を示す変数mmからも値を1引く必要があります。
②の場合は①と同様の問題のほかに変数y2からも値を1引かなければなりません。
③の場合はさらにさらに、4年に一度の2月29日の値を取り出す必要があります。

これを解決するのが下記です。
if %dd%==00 (
if %mm%==01 (set mm=12& set dd=31& if %y2%==00 (set y2=99) else (set /a y2=%y2%-1))
if %mm%==02 (set mm=01& set dd=31)
if %mm%==03 (set mm=02& set dd=28& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03& set dd=31)
if %mm%==05 (set mm=04& set dd=30)
if %mm%==06 (set mm=05& set dd=31)
if %mm%==07 (set mm=06& set dd=30)
if %mm%==08 (set mm=07& set dd=31)
if %mm%==09 (set mm=08& set dd=31)
if %mm%==10 (set mm=09& set dd=30)
if %mm%==11 (set mm=10& set dd=31)
if %mm%==12 (set mm=11& set dd=30)
)

順番に黄色の文字で説明すると、
if %dd%==00 (  
↑変数ddが00となっている場合、下記を実行する

if %mm%==01 (set mm=12& set dd=31& if %y2%==00 (set y2=99) else (set /a y2=%y2%-1))
↑変数mmが01、つまり1月1日の場合、変数mmには12、変数ddには31を代入します。
また、もし変数y2が00、つまり西暦2000年などの年だった場合は変数y2に99を指定、それ以外だった場合は変数y2から1を引く計算をします。

if %mm%==02 (set mm=01& set dd=31)
↑変数mmが02、つまり2月1日の場合、変数mmには01、変数ddには31を代入します。

if %mm%==03 (set mm=02& set dd=28& if %ymod%==0 (set dd=29))
↑変数mmが03、つまり3月1日の場合、変数mmには02、変数ddには28を代入します。ただし、もしも変数ymodが0、つまり閏年であった場合、ddには29の値を追加します。

if %mm%==04 (set mm=03& set dd=31)
↑変数mmが04、つまり4月1日の場合、変数mmには03、変数ddには31を代入します。

if %mm%==05 (set mm=04& set dd=30)
↑変数mmが05、つまり5月1日の場合、変数mmには04、変数ddには30を代入します。

if %mm%==06 (set mm=05& set dd=31)
↑変数mmが06、つまり6月1日の場合、変数mmには05、変数ddには31を代入します。

if %mm%==07 (set mm=06& set dd=30)
↑変数mmが07、つまり7月1日の場合、変数mmには06、変数ddには30を代入します。

if %mm%==08 (set mm=07& set dd=31)
↑変数mmが08、つまり8月1日の場合、変数mmには07、変数ddには31を代入します。

if %mm%==09 (set mm=08& set dd=31)
↑変数mmが09、つまり9月1日の場合、変数mmには08、変数ddには31を代入します。

if %mm%==10 (set mm=09& set dd=30)
↑変数mmが10、つまり10月1日の場合、変数mmには09、変数ddには30を代入します。

if %mm%==11 (set mm=10& set dd=31)
↑変数mmが11、つまり11月1日の場合、変数mmには10、変数ddには31を代入します。

if %mm%==12 (set mm=11& set dd=30)
↑変数mmが12、つまり12月1日の場合、変数mmには11、変数ddには30を代入します。

)

長かったですが、こんな感じで閏年対策、元日対策、月初対策が終わります。

次に、「まだあるの?」という感じですが、変数y2の値を計算した場合には変数ddのときと同様に桁落ちが発生する場合があります。
たとえば2009年の場合は09-1=8のようになってしまうわけです。
そこで、下記のように値を2桁に戻しておきます。
たとえば、もし変数y2が「1」なら「01」を代わりに代入する、というような処理をしています。
if %y2%==0 (set y2=00)
if %y2%==1 (set y2=01)
if %y2%==2 (set y2=02)
if %y2%==3 (set y2=03)
if %y2%==4 (set y2=04)
if %y2%==5 (set y2=05)
if %y2%==6 (set y2=06)
if %y2%==7 (set y2=07)
if %y2%==8 (set y2=08)
if %y2%==9 (set y2=09)


お疲れ様でした。あとは変数ystdyへ値を代入すればよいだけです。
たとえば、2015年5月12日の場合は変数ystdyは「150511」になります。
set ystdy=%y2%%mm%%dd%

最後に、今までの処理をまとめておきます。

set dt=%date%
set yy=%dt:~-10,4%
set y2=%dt:~2,2%
set mm=%dt:~5,2%
set dd=%dt:~8,2%

set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4

if %dd%==00 (
if %mm%==01 (set mm=12& set dd=31& if %y2%==00 (set y2=99) else (set /a y2=%y2%-1))
if %mm%==02 (set mm=01& set dd=31)
if %mm%==03 (set mm=02& set dd=28& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03& set dd=31)
if %mm%==05 (set mm=04& set dd=30)
if %mm%==06 (set mm=05& set dd=31)
if %mm%==07 (set mm=06& set dd=30)
if %mm%==08 (set mm=07& set dd=31)
if %mm%==09 (set mm=08& set dd=31)
if %mm%==10 (set mm=09& set dd=30)
if %mm%==11 (set mm=10& set dd=31)
if %mm%==12 (set mm=11& set dd=30)
)

if %y2%==0 (set y2=00)
if %y2%==1 (set y2=01)
if %y2%==2 (set y2=02)
if %y2%==3 (set y2=03)
if %y2%==4 (set y2=04)
if %y2%==5 (set y2=05)
if %y2%==6 (set y2=06)
if %y2%==7 (set y2=07)
if %y2%==8 (set y2=08)
if %y2%==9 (set y2=09)

set ystdy=%y2%%mm%%dd%
echo %ystdy%

以上です。

IISのログを複数台のWindowsServerからLinuxServerへ収集してアクセスログ解析ソフトで解析する

タイトル通りです。私が管理している環境ではIISを動かしているWindowsServerが複数台ありまして、それらのIISのアクセスログをログ収集するLinuxの運用サーバへ集計する必要がありました。

このための処理順序としては下記のようにしました。
1.各WebサーバのIISでアクセスログが生成される(日次)
2.朝9時に更新終了したアクセスログを10時にタスクスケジューラでLinuxサーバへ転送する。
※うちのIISではアクセスログを日次でローテしているので、日本時間の朝9時(GMT0時)にその1日前の日付分のアクセスログファイルの更新が完了する。
具体的にいうと、2015年3月31日朝9時~2015年4月1日の朝8時59分までのアクセスログは、すべて2015年3月31日付のアクセスログに収容されるということです。
ちなみにローテ時間はIISの設定で変更可能なので、今現在サーバ構築中の人はこれを実施すればよいと思います。
http://www.atmarkit.co.jp/fwin2k/win2ktips/486iislog/iislog.html
ただし記事にもあるように、書き込まれる時刻はGMTのままですのでご注意ください。あくまで0時にログローテしてくれるだけです。
3.AWStats(W3C時刻対応の解析ソフトなら何でも良い)でアクセスログを集計する

よって、今回の環境ではいくつかの面倒くさい処理をこちらでスクリプトにしてやる必要があります。
① 1日前の分のアクセスログファイル名を指定する。
1日前のアクセスログファイル名を指定するコマンドがWindowsにはどうやらないようです。
Linuxはhttp://shellscript.sunone.me/date.htmlで簡単に終了します。

② ①にて指定されたアクセスログファイルをLinuxサーバへ送付する。
これはそんなに難しいことではないですが。

③ AWStatsによって、複数サーバのアクセスログを日時順に集計する。
AWは自分が食べ終えている最後のログ日時より古いログを食べてくれないです。
たとえば2015年4月10日分までのログを集計し終えている場合は、追加で2015年4月1日のログを集計させようとしても集計してくれません。

ひとつずつ記事を作って、順次備忘録を作っていこうと思います。
記事作成し次第、こちらの記事の該当箇所へリンクします。

Windows7のtelnetを使って通信疎通確認

自分のWindows7端末から特定のポートを指定して通信疎通確認をしたい場合、telnetクライアントを有効にする必要があります。

1.コントロールパネルを開く
2.「プログラム」>「プログラムと機能」項目内「Windows の機能の有効化または無効化」をクリック
3.Windowsの機能一覧から「Telnetクライアント」を有効化
4.コマンドプロンプトで> telnet <ポート番号>
 真っ暗な画面や何かしらのレスポンスがあれば成功。
 終わる時はquitやqを投入してやれば終わります。

・その他コマンドは下記参照
http://windows.microsoft.com/ja-jp/windows/telnet-commands#1TC=windows-7

WindowsServerのルーティング設定

意外とルーティング設定とかやったことなかったのでメモです。
http://www.atmarkit.co.jp/ait/articles/0301/11/news003.html

■現在のルーティング設定閲覧
route print

■ルーティング追加
route -p add 192.168.1.0 mask 255.255.255.0 172.16.1.1
みたいな感じだろうか。-pつけないって考えにくいよなーとか思ったり。

route [オプション] add ネットワーク mask マスク ゲートウェイ

•オプション
 「-f」と「-p」がある。-fを付けると、ルートを追加する前に、現在のデフォルト・ルートを削除する。デフォルト・ゲートウェイを変更する場合に利用するとよい。-pを付けると、追加したルート情報が、次回の再起動後からもずっと有効になる。デフォルトでは、システムを再起動するとここで追加した情報は失われる。

•ネットワーク
 ルーティングのあて先となるネットワーク・アドレスを指定する。
•マスク
 ルーティングのあて先となるネットワークのネットマスクを指定する。省略すると255.255.255.255。
•ゲートウェイ
 ゲートウェイ(ルータ)のIPアドレスを指定する

•これ以外にもMetricや使用するインターフェイスを明示的に指定することも可能である。詳細についてはrouteコマンドのヘルプを参照のこと(単にrouteとだけ入力すると表示される)
Copyright © m
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。