アプリ版:「スタンプのみでお礼する」機能のリリースについて

始めまして。
miko_zzと申します。

現在運用中のサーバでプロセス監視をCシェルで
下記コマンドの結果により行っております。

このコマンドの結果は通常では正常に監視出来ているのですが、
極まれにプロセスは正常に起動中でもエラーを出力してしまいます。
発生条件が判明できないため発生したら目視で確認することで運用を
しているのですが、原因が知りたいのでご助力お願い致します。

ちなみに発生頻度は 年に3回くらいで非定期的です。

------------------------------------------------------------------
SET PRC_ACCOUNT = プロセスを実行したユーザ名
SET PRC_NAME = 監視するプロセス名

ps axuww | egrep ^$PRC_ACCOUNT | grep $PRC_NAME >& /dev/null
if ( ${status} != 0 ) then
echo "ERROR:プロセスが見つかりません" ;
endif
------------------------------------------------------------------

A 回答 (4件)

#1です。



Cシェルは、名前のとおりC言語に似せた文法で、C言語経験者になじみやすいという特徴をもっている、、、はずが、シェルスクリプトというもともとC言語的発想がなじまない分野に強引に当てはめようとしたためかなり無理があり、むしろ非常にわかりづらいものとなっています。Bourneシェルスクリプトではきれいに簡単に書けるような処理がCシェルで記述すると繁雑になり美しくないことが多いです。
標準出力と標準エラー出力を別個にリダイレクトできないなど不便な点も多いです。
なので、そもそもCシェルでスクリプトを書く人自体少ないため、メンテナンス上もよろしくありません。
/bin/csh がかならずシステム上に存在するという保証もありません。(/bin/shはかならずあります)
ログインシェルcshやtcshとして使う人は少なからずいますが、昔ながらの/bin/shよりコマンドラインが使いやすいというだけです。今はbash,ksh,zshなど、Bourne系でも強力なものがたくさんありますから、ログインシェルとしてのcshも廃れていくと思われます。

さて、出力を/dev/nullに捨てていますが、出力をファイルに落としておくように一時的に変更してしばらく様子を見て、次にエラーになった時にそのファイルの中身を見て原因を分析してはどうでしょうか。

ひとまずこの質問は閉じて、何か月後かわかりませんが、またエラーになった時に解決できなければ、上記の出力内容を添えて再度質問されてはどうでしょうか。
    • good
    • 0
この回答へのお礼

そうですね、一度クローズして情報がもう少し取得できたら再投稿いたします。
実は9ヶ月くらい前からテスト環境では全ログ出力バージョンを動作しているのですが、未だにテスト環境では発生しないのです。
本番環境では2月と10月に発生しているのに・・・
Cシェルの件ご親切にありがとう御座いました。

お礼日時:2004/11/18 10:05

回答ではないのですが、


始めのシェル変数の代入ですが”SET”は大文字で記述されているのでしょうか?
私も試してみましたが大文字ですとシェル変数への代入が行われずps~条件式の部分が機能しないみたいなのですが。

この回答への補足

説明に記載した"SET"は現在実行している
監視スクリプトには"set"と小文字で書かれてました。
掲載時のミスです。申し訳ないです。

補足日時:2004/11/17 09:20
    • good
    • 0

>if ( ${status} != 0 ) then



${status}の部分はなんでしょうか?
また、$PRC_NAME に入るプロセスの間に空白(ps -ax)があるとうまく取れないもしくは余計なものまで取ってしまうのではないでしょうか?

このような方法ではどうでしょうか?
PRC_ACCOUNT = プロセスを実行したユーザ名
PRC_NAME = 監視するプロセス名

ps -axuww | awk '($1 == "${PRC_ACCOUNT}"){print $0}' | grep "${PRC_NAME}"
if [ $? != 0 ];then
echo "ERROR:プロセスが見つかりません"
fi

この回答への補足

Cシェルの場合コマンドの実行結果が 変数 $status に入るので、使用しております。

補足日時:2004/11/16 19:34
    • good
    • 0

Cシェルでスクリプトを書くのはいろんな意味で良くないです。


それが原因である可能性はほとんどないと思いますが。。。ためしにBourneシェルで書き直してみる価値もあるでしょう。

あとは、監視方法を変えること。
psとgrepの組み合わせ以外で良く使われる方法は、起動時にpidをファイルに書き出しておき、監視プロセスではそのpidの存在を調べるようにする、という方法です。

また、最近はpgrep,pkillというコマンドもありますので調べてみてください。

この回答への補足

Cシェルだと良くない理由と言うのはどのようなことなのでしょうか。
質問内容が違いますが教えてください。
宜しくお願い致します。

補足日時:2004/11/15 14:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!