- - PR -
awk構文について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-11-26 20:00
こんばんは。
多数の方から多数の貴重なアドバイス大変ありがとうございます。 私としましてもみなさまのアドバイスの通りにシェルの変更を考えている最中です。 ただ私の未熟なレベルではすぐに書き直してこの掲示板にフィードバックする事ができません。 皆様のアドバイスを理解して考えて掲示板に貼り付けるまでに時間がかかりますのでそのあたり をご了承くださいますようお願い申し上げます。 かならず人様が見れるものに近づけますのでよろしくお願い致します。 | ||||||||
|
投稿日時: 2004-11-26 20:04
せっかくgrepしているので、もう一回PIDでgrepをかけてみてはいかがでしょうか。 ほろりんさんに回答した通り、httpd.pidに333というのが書かれていた場合、33344や43334、44333などにマッチしないように注意する必要がありますが。 ・・・と書くつもりだったのですが心配になったのでお聞きします。 # ps -ef | grep http | grep -v grep の結果が「正常なプロセスとそうでないプロセス」と表現されていますが、大抵の場合、どれも正常なプロセスですが、その認識は合っていますか。親httpdは子httpdを作成するためです。 おそらく親httpdはrootないしはapache専用ユーザ以外で実行されているでしょうから、プロセスのオーナーがapache専用ユーザ以外のものが親httpdであり、httpd.pidに書かれているプロセスIDを持ちます。 このhttpdからフォークされているhttpdが子httpdであり、3列目がhttpd.pidに書かれているプロセスIDになっているかと思います。 また、Linuxではプロセスだけではなくスレッドもあたかもプロセスかのように見えるので、山のようにhttpdが見えたりするわけですが・・・・・・。 ちなみに私の環境を書いておくと、、、 root 23435 1 0 Nov17 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 26768 23435 0 Nov21 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 26769 23435 0 Nov21 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 26770 23435 0 Nov21 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 26771 23435 0 Nov21 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 26772 23435 0 Nov21 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 26773 23435 0 Nov21 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 26774 23435 0 Nov21 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 26775 23435 0 Nov21 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 3447 23435 0 Nov25 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 3449 23435 0 Nov25 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 4396 23435 0 14:40 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 4398 23435 0 14:40 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 4399 23435 0 14:40 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 4402 23435 0 14:40 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 4403 23435 0 14:40 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 4404 23435 0 14:40 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 4405 23435 0 14:40 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 4410 23435 0 14:40 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 4411 23435 0 14:40 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY apache 4412 23435 0 14:40 ? 00:00:00 /usr/sbin/httpd -DHAVE_PROXY なのですが、どれも正常なプロセス(のはず)です。 さて、この辺りの認識はいかがでしょうか? # awkとは全く関係ありませんが・・・・・・・。 [ メッセージ編集済み 編集者: komey 編集日時 2004-11-26 20:07 ] | ||||||||
|
投稿日時: 2004-11-26 20:21
komey様 丁寧な質問に恐縮いたします。 私の文章の書き方が間違っておりました。 正常なプロセスかそうでないプロセスかどうかの判断をする為のシェルではなく `cat /usr/local/apache/logs/httpd.pid` の中にある値と比べて同じかどうかを判断するシェルでございます。 皆々様にはわたくしの未熟なレベルのせいでイライラさせてしまい申し訳ございません。 繰り返して申し訳ございませんが、皆様のアドバイスのとおりに変更していく覚悟です。 皆様のおっしゃる事を理解して反映させるまで時間がかかりますが、よろしくお願い致します。 | ||||||||
|
投稿日時: 2004-11-26 21:37
わかりました。では、次の質問です。 ある1行のhttpdのPIDとhttpd.pidのPIDが一致しなくてもそれはNGではなく、全てのhttpdのPIDと一致しない場合がNGである、ということで良いでしょうか。 であれば、PIDでgrepした結果があればOK、結果がなければNGということでも良いのでは? [ メッセージ編集済み 編集者: komey 編集日時 2004-11-26 21:38 ] | ||||||||
|
投稿日時: 2004-11-29 13:32
こんにちは。
komey様のご質問に答える為にはまだ勉強が必要ですので明日の夕方まで お待ちいただけないでしょうか? 今考えてますのが、リダイレクションのコマンドをつかいawkで抜き出した$2の中身をファイルに書き込みます。 そしてwhile文を使って1行1行読み込ませ、if文で判定をさせようと作っております。 またきりのよいところで途中経過報告をいたします。 | ||||||||
|
投稿日時: 2004-11-29 13:47
すみません、混乱させてしまったようです。 ps -efの結果が前述の私の例の通りとした場合、スクリプトを1回実行した際にビギナーさんが期待する動作というのは、 ・OKかNGかが1行出力されること なのか、それとも、 ・OKが1行とNGが20行出力されること なのか、をお聞きしたいだけです。 私は前者なのでは?と思ったので、ループを使って1つずつ判定するのではなく、grepやawkで抽出した結果を、もう一度PIDでgrepし、結果があればOK、結果がなければNGとすれば良い、と書いた次第です。 | ||||||||
|
投稿日時: 2004-11-29 14:05
ps -efの結果が前述の私の例の通りとした場合、スクリプトを1回実行した際にビギナーさんが期待する動作というのは、
・OKかNGかが1行出力されること なのか、それとも、 ・OKが1行とNGが20行出力されること なのか、をお聞きしたいだけです。 私は前者なのでは?と思ったので、ループを使って1つずつ判定するのではなく、grepやawkで抽出した結果を、もう一度PIDでgrepし、結果があればOK、結果がなければNGとすれば良い、と書いた次第です。 [/quote] 親切な質問ありがとうございます。おっしゃっている意味が理解できました。 私が考えている方は後者です。 OKが一行と残りはすべてNGとしてエラー出力を考えています。 私の環境でコマンドを実行したものです。 ↓ # ps -ef | grep http nobody 10908 10868 0 11月 24 ? 0:00 /usr/local/apache/bin/httpd -DSSL nobody 10873 10868 0 11月 24 ? 0:00 /usr/local/apache/bin/httpd -DSSL root 10868 1 0 11月 24 ? 0:00 /usr/local/apache/bin/httpd -DSSL nobody 10872 10868 0 11月 24 ? 0:00 /usr/local/apache/bin/httpd -DSSL nobody 10871 10868 0 11月 24 ? 0:00 /usr/local/apache/bin/httpd -DSSL nobody 10870 10868 0 11月 24 ? 0:00 /usr/local/apache/bin/httpd -DSSL nobody 10869 10868 0 11月 24 ? 0:00 /usr/local/apache/bin/httpd -DSSL root 29682 22182 0 13:53:34 pts/1 0:00 grep http # cat /usr/local/apache/logs/httpd.pid 10868 | ||||||||
|
投稿日時: 2004-11-29 16:03
なるほど、それで会話がかみ合わなかったわけですね。 確かにそれであればループをまわすのが普通ですね。 # 全て正常なプロセスであるにも関わらずOKとNGを出力したい、ということに少し違和感を覚えますが。。。。汗 がんばってください。 |