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

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

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2008/09/08 23:25:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント35pt

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

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

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

ps

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

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

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


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

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

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

id:otanako

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さんのおっしゃる推測にあてはまりそうな気がします。

2008/09/02 19:42:17
id:ahirusan No.2

回答回数229ベストアンサー獲得回数3

ポイント35pt

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

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

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

id:otanako

ahirusanさん

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

記述されていました。

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

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

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

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

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

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

2008/09/02 19:47:59
  • id:Mook
    推測ですが、これと対になる startScheduler のようのなものがあり、プロセスIDの登録はそちらが
    行っていると思います。
    たとえファイルが残っていても、次回起動時に更新されていると思いますが、まずはファイルの更新日時等
    確認してはどうでしょうか。

    他に推測されるのは、起動中にプロセスが終了、もしくは再起動して、起動時のプロセスが存在していないために
    表記のエラーが出る、といった状況かと思います。
  • id:otanako
    ちなみに、stopシェル(停止時に実行)の記述は以下となっています。

    PID_FILE=/export/home/SUNWwbsvr/https-admserv/logs/pid
    if test -f $PID_FILE ; then
    kill -TERM `cat $PID_FILE`
    if test $? -ne 0 ; then
    exit 1
    fi
    else
    echo server not running
    exit 1
    fi
    loop_counter=1
    max_count=30
    while test $loop_counter -le $max_count; do
    loop_counter=`expr $loop_counter + 1`
    if test -f $PID_FILE ; then
    sleep 2
    else
    echo server 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

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません