人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Sun Java System Web Server の停止時のエラーメッセージ(シェルの記述の意味について)

停止コマンドを実行すると、以下のメッセージが出ますが、停止・起動は問題なくできています。

「/export/home/SUNWwbsvr/https-admserv/stopScheduler: kill: そのようなプロセスは存在しません。」

上記パスにあるシェル:stopSchedulerの記述は以下です。

% more stopScheduler
#!/bin/sh
PID_FILE=/export/home/SUNWwbsvr/https-admserv/logs/scheduler.pid
if test -f $PID_FILE; then
kill -TERM `cat $PID_FILE`
if test $? -ne 0; then
exit 1
else
rm $PID_FILE
fi
else
echo "schedulerd daemon not running."
exit 1
fi
COUNTER=1
MAX_COUNT=30
while test $COUNTER -le $MAX_COUNT; do
COUNTER=`expr $COUNTER + 1`
if test -f $PID_FILE; then
sleep 2
else
echo "schedulerd daemon has been shutdown."
exit 0
fi
done
echo "server not responding to exit command"
echo "killing process group"
kill -9 -`cat $PID_FILE`
rm $PID_FILE
exit 1

●シェルに記述されている内容からエラーの理由がわかりますでしょうか?
●記述から判別できない場合、どのようなことをした(状態)である場合
エラーが出ることがかんがえられますでしょうか?


●質問者: otanako
●カテゴリ:コンピュータ
✍キーワード:/bin/sh Command DAEMON echo EXIT
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Mook
●35ポイント

コマンドを実行する前に、下記のファイルの中身を見てみてください。

/export/home/SUNWwbsvr/https-admserv/logs/scheduler.pid

数値が書かれていると思いますが、ターミナルで

ps

と実行した結果にその番号があるでしょうか。

あった場合、コマンドを実行してエラーが出るようなら、ほかの原因の調査が必要ですが、

その番号がない場合、該当のエラーメッセージとなります。


つまり、起動時にプロセスIDをファイルに保存しており、それを終了しようとしたときに

そのプロセスが既に存在していなかったというのが、推測される状況です。

http://www.coins.tsukuba.ac.jp/~yas/coins/syspro-2004/2004-04-12...

◎質問者からの返答

Mookさん

scheduler.pid には、番号がありました。

export/home/SUNWwbsvr/https-admserv/logs

% ls

access errors pid scheduler.error scheduler.pid

%

vupweb01% more scheduler.pid

1899

なお、psコマンドを打つと、1899のプロセスIDは存在しませんでした。

なので、Mookさんのおっしゃる推測にあてはまりそうな気がします。


2 ● あひる
●35ポイント

古いscheduler.pidファイルが残ってしまっているために、正常終了したWEBサーバプロセスとは無関係にkillコマンドが発せられているからではないでしょうか。(if test -f $PID_FILE → kill)

試しに、rmコマンドでscheduler.pidを消してみては如何でしょうか?

上記シェルスクリプトでは、killコマンドが失敗した場合には$PID_FILEが削除されないので、一度残ってしまった$PID_FILEはそのまま次の停止時にも使用されてしまいます。また、このようなことが二度と起こらないようにするためには、上記スクリプトの最後にrmコマンドで$PID_FILEを削除するようにすれば良いでしょう。なので、killコマンドの成功・失敗を判定している部分は不要になります。

◎質問者からの返答

ahirusanさん

確かに、Mookさんの返答でも書きましたが、現在存在しないプロセスIDが

記述されていました。

>正常終了したWEBサーバプロセスとは無関係にkillコマンドが発せられているからで>はないでしょうか。

if test -f $PID_FILE → kill →この記述が、あるために正常終了のはずが

killしてしまっているということでしょうか。

実際には、stopSchedulerで停止しているのではなく、stopシェルで実行している

のですが、stopSchedulerを見てしまうのでしょうか。

killコマンド失敗時には、PID_FILEがクリアされないという点は大変参考となりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ