- 締切済み
linux制御文3
もう自分の中途半端な処理は、書きません まる投げして、申し訳ないですが何方か回答お願いします I/O IN 各ドメインのドメイングループが停止していないか確認する OUT 停止しているドメイングループをログ出力する 全停止している場合は、ドメイン停止ログを出力する 「機能概要」 ドメインステータスの死活監視を行います ドメインステータス確認コマンドを実行{今回このコマンドは、存在しない為デバッグを作る} 各ドメイン内に起動中のドメイングループが存在していることを確認します 全てのドメイングループが停止しているドメインについては、その旨をログ出力します また停止しているドメイングループが存在した場合、その旨をログに出力します 停止中のドメインをリストで管理し停止状態から復旧状態に 回復した場合もその、旨をログ出力します。 部分説明 【項目】 【説明】 ドメイン デバッグ内のAとB ドメイングループ デバッグ内のa1,a2,b1,b2 ステータス デバッグ内のOK(起動中)NG(停止中) デバッグ a.sh 「出力例」 A,a1,OK A,a1,OK [デバッグ]a.shの中身 if [ $1 = 1 ]; then #ドメイングループ全てOKのケース echo "A,a1,OK" echo "A,a2,OK" echo "B,b1,OK" echo "B,b2,OK" elif [ $1 = 2 ]; then #一部ドメイングループが停止中のケース echo "A,a1,OK" echo "A,a2,NG" echo "B,b1,OK" echo "B,b2,NG" elif [ $1 = 2 ]; then #全てドメイングループが停止中のケース echo "A,a1,NG" echo "A,a2,NG" echo "B,b1,NG" echo "B,b2,NG" fi > hoge.log 「NGログ例」 [ERROR] A,a1 steatas NG 「グループメンバー全NGログ例」 [ERROR] Domain A steatus NG 「復旧ログ例」 Restoration Domain B,b1 I/Oどうりで、動いてくれれば処理内容はなんでも、OKです 唯一できれば、やめてほしいのが ”awk”コマンドの使用です すいません、まだ使い方がよくわからないのです メンドくさい場合は、使っても大丈夫です・・・ できればです・・・できれば・・・ 何卒宜しくお願いします
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Toshi0230
- ベストアンサー率51% (836/1635)
そうねぇ。私もNo.1氏の意見に賛成かな 一応、書いてあるとおりに処理する場合(ドメインもドメイングループも未知とします)、こんな感じに地道にシコシコと処理することになるかな。 cut -f 1 -d "," < hoge.log | sort | uniq > domains.tmp for i in `cat domains.tmp;` do if [ -r stat.dom-$i.tmp ]; then rm -f stat.dom-$i.tmp ; fi grep $i hoge.log >> stat.dom-$i.tmp for j in `cat stat.dom-$i.tmp`; do domgr=`echo $j | cut -f 2 -d ","` domstat=`echo $j | cut -f 3 -d ","` if [ $domstat = OK ] ; then if [ -r stat.dom-$i.domgr-$domgr ] ; then echo Restored domain $i,$domgr rm -f stat.dom-$i.domgr-$domgr fi else echo $domstat > stat.dom-$i.domgr-$domgr echo [ERROR] $i,$domgr status NG fi done OKs=`grep NG stat.dom-$i.tmp` if [ "$OKs" = "" ]; then echo Domain $i status NG; fi done いろいろと力業だからあまり綺麗じゃないし、そもそもテストしてないんで動くかどうか判らないけどね:-P perlでもawkでも良いけど、適当なスクリプト言語で実装した方が綺麗になるとは思う。 質問とは関係ないけど、「デバッグ(debug)」ってのはプログラム中のバグ(bug)を取る作業のこと。今回のa.shの様なものは「デバッグ」とは言いません。
- kmee
- ベストアンサー率55% (1857/3366)
・「NGログ」と「グループメンバー全NGログ」は、同じファイル等に出力するのか? ・全NGのときは個別NGは表示するのか、しないのか? →プログラムの流れが変わります ・「復旧」の判断方法は? →前回の結果を残す必要がある ・この例では、実行中にhoge.logは変化しないが、実運用時に、途中でログが変化する可能性はあるのか? →変化する可能性があるなら、開始時にコピーを取って、同じデータだけを使えるようにする ・ドメイン、ドメイングループは既知なのか? →既知でないなら、hoge.logからどんなドメイン、ドメイングループがあるか取得する たとえば、プログラムの流れはこんな風になるでしょう。 全てのドメインについて ngフラグOFF OKの数を数える NGの数を数える if OKの数=0 then 全NGログ出力、ngフラグON else if NGの数 != 0 then 各NGログ出力、ngフラグON if ngフラグOFF かつ 前回のngフラグON then 復旧フラグ ngフラグの保存 これをシェルスクリプトでやるとしたら for d in A B do ok=`grep '^$d,.*,OK\$' hoge.log | wc -l` ng=`grep '^$d,.*,NG\$' hoge.log | wc -l` .... 制御文だのawkだの言う以前に、このような「どうやったらいいか」が整理できてないのでは? これくらいの規模になってくると、シェルスクリプトの方がよっぽどメンドくさいですよ。