始めまして。
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
------------------------------------------------------------------
No.4ベストアンサー
- 回答日時:
#1です。
Cシェルは、名前のとおりC言語に似せた文法で、C言語経験者になじみやすいという特徴をもっている、、、はずが、シェルスクリプトというもともとC言語的発想がなじまない分野に強引に当てはめようとしたためかなり無理があり、むしろ非常にわかりづらいものとなっています。Bourneシェルスクリプトではきれいに簡単に書けるような処理がCシェルで記述すると繁雑になり美しくないことが多いです。
標準出力と標準エラー出力を別個にリダイレクトできないなど不便な点も多いです。
なので、そもそもCシェルでスクリプトを書く人自体少ないため、メンテナンス上もよろしくありません。
/bin/csh がかならずシステム上に存在するという保証もありません。(/bin/shはかならずあります)
ログインシェルcshやtcshとして使う人は少なからずいますが、昔ながらの/bin/shよりコマンドラインが使いやすいというだけです。今はbash,ksh,zshなど、Bourne系でも強力なものがたくさんありますから、ログインシェルとしてのcshも廃れていくと思われます。
さて、出力を/dev/nullに捨てていますが、出力をファイルに落としておくように一時的に変更してしばらく様子を見て、次にエラーになった時にそのファイルの中身を見て原因を分析してはどうでしょうか。
ひとまずこの質問は閉じて、何か月後かわかりませんが、またエラーになった時に解決できなければ、上記の出力内容を添えて再度質問されてはどうでしょうか。
そうですね、一度クローズして情報がもう少し取得できたら再投稿いたします。
実は9ヶ月くらい前からテスト環境では全ログ出力バージョンを動作しているのですが、未だにテスト環境では発生しないのです。
本番環境では2月と10月に発生しているのに・・・
Cシェルの件ご親切にありがとう御座いました。
No.3
- 回答日時:
回答ではないのですが、
始めのシェル変数の代入ですが”SET”は大文字で記述されているのでしょうか?
私も試してみましたが大文字ですとシェル変数への代入が行われずps~条件式の部分が機能しないみたいなのですが。
この回答への補足
説明に記載した"SET"は現在実行している
監視スクリプトには"set"と小文字で書かれてました。
掲載時のミスです。申し訳ないです。
No.2
- 回答日時:
>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
No.1
- 回答日時:
Cシェルでスクリプトを書くのはいろんな意味で良くないです。
それが原因である可能性はほとんどないと思いますが。。。ためしにBourneシェルで書き直してみる価値もあるでしょう。
あとは、監視方法を変えること。
psとgrepの組み合わせ以外で良く使われる方法は、起動時にpidをファイルに書き出しておき、監視プロセスではそのpidの存在を調べるようにする、という方法です。
また、最近はpgrep,pkillというコマンドもありますので調べてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- サッカー・フットサル 森保続投決定? 5 2022/12/13 07:04
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- サッカー・フットサル 日本代表のカタール大会の結果をどう捉えるかで 4 2022/12/06 07:10
- 政治 こんな監督を解雇できない、自民党の作った法律に問題がありますね? 4 2022/05/10 20:54
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- 歴史学 山上徹也、「山上家」の家系や先祖、一族の調査はしてますか? 4 2022/07/11 23:39
- Visual Basic(VBA) バックグラウンドのプロセスのエクセルを閉じる方法 4 2022/05/12 15:39
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- 不安障害・適応障害・パニック障害 認知療法について 1 2022/09/14 20:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
bashでシングルクォート内の変...
-
[Linux初心者]Ubuntu22.04.3LTS...
-
自作のウェブサイトを友人に見...
-
Ubuntu系とCentOS系の違いはな...
-
AWSでSSH接続をしたいのですが...
-
ubuntu(linux)のシャットダウン...
-
Ubuntu on Xorgのログインについて
-
ubuntuで デイスク/deb/loopと...
-
ubuntuのシャットダウンが進ま...
-
yumやaptで依存関係で自動的に...
-
Ubuntuで数字だけのユーザーア...
-
Windowsのローカルディレクトリ...
-
VirtualBox ゲストOSにPC内蔵HD...
-
linuxサーバーのキャッシュをク...
-
ホストオンリーアダプタで接続...
-
ntpq -pの結果が全てstratum 16...
-
ssl_error_logのエラー内容(AH...
-
Let’s Encrypt の自動更新をcro...
-
Linux のシェルスクリプトの強...
-
ファイルデータでネットワーク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
ubuntuのシャットダウンが進ま...
-
Windowsのパソコンを使って仮想...
-
ubuntuで デイスク/deb/loopと...
-
AWSでSSH接続をしたいのですが...
-
Ubuntu on Xorgのログインについて
-
LinuxのノートパソコンでDVDコ...
-
linuxサーバーのキャッシュをク...
-
Postfixでドコモメールに送信す...
-
Windowsのローカルディレクトリ...
-
tarで纏める際に、複数場外した...
-
Linux のシェルスクリプトの強...
-
Linux Mint 日本語入力できなく...
-
ホストオンリーアダプタで接続...
-
ubuntuのサーバー(virtual box)...
-
VirtualBox ゲストOSにPC内蔵HD...
-
shellscript内のコマンドを、su...
-
Linux Ubuntu22.4の起動時エラ...
-
Ubuntu でinvalid filenameとな...
おすすめ情報