- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:while文内部の値を、外部で使用したい)
Linuxサービスの稼働状況を確認して別処理を動かすシェルスクリプト
このQ&Aのポイント
- Linux(Red Hat Enterprise Linux5.6)にて、稼動しているサービスの実行結果を参照&判断して別処理を動かすシェルスクリプトを作成したいと考えています。具体的には、nfsとnfslockのサービスの稼働状況を確認し、ランレベル3でどちらかのサービスがoffになっていたらshutdownコマンドを実行する処理を実装しましたが、while文内部の値を外部で使用できないという問題が発生しています。
- 現在のスクリプトでは、chkconfigコマンドを使用してnfsとnfslockのサービスの稼働状況を取得し、while文で1行ずつ読み込みながら処理を行っています。ただし、while文内で取得したサービスの稼働状況を外部で使用することができず、常にshutdownコマンドが実行されてしまいます。
- この問題を解決するためには、while文内で取得したサービスの稼働状況を外部の変数に格納する必要があります。具体的には、nfsとnfslockのサービスの稼働状況をwhile文内で確認し、外部の変数に格納しておくことで、後で外部で比較判定を行うことができます。また、if文内での比較演算子の使用方法にも注意が必要です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
直接の原因は、パイプを使うとそれぞれがサブシェルで実行されるため、そこでシェル変数にセットしても、メインプロセスからは参照できません。ファイルを経由するか、 A=`xxx | yyy | zzz` のように出力させて変数にセットして後で調べるか。 で、そもそもchkconfigは現在の稼働状況を調べるコマンドではありません。詳しくは man chkconfig を。 テストしてませんが、 if ! service nfs status >/dev/null || ! service nfslock status then shutdown -r now fi かな。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10361)
回答No.2
No1です。書き漏らし。 動作には影響しませんが、service nfslock status にも >/dev/null をつけた方がいいでしょうね。つけないと毎回cronからメールが来ちゃいます。
お礼
回答ありがとうございます。 パイプの仕様について、よく知らずに使っていたのが原因ですね。 他の方法を模索してみます。 chkconfigの件もありがとうございます。