- PR -

Tomcatとシェルに関して

投稿者投稿内容
Keisuke
大ベテラン
会議室デビュー日: 2003/10/24
投稿数: 105
投稿日時: 2004-01-16 12:53
妙な技巧をこらすよりも、tomcat.pid が作られるようにアカウントやパーミッションを検討するのが良いと思いますよ。
水無月 遊々
大ベテラン
会議室デビュー日: 2003/10/22
投稿数: 139
お住まい・勤務地: お星様☆彡
投稿日時: 2004-01-16 13:50
こんにちわっ! 遊々です。
RedHatの起動スクリプトを見ると以下のようになっております。

------------------スクリプト抜粋--------------------------

# Path to the tomcat launch script (direct don't use wrapper)
TOMCAT_SCRIPT=/usr/bin/dtomcat4

# Tomcat name
TOMCAT_PROG=tomcat4

RETVAL=0

# See how we were called.
start() {
echo -n "Starting $TOMCAT_PROG: "

if [ -x /etc/rc.d/init.d/functions ]; then
daemon --user $TOMCAT_USER $TOMCAT_SCRIPT start
else
su - $TOMCAT_USER -c "$TOMCAT_SCRIPT start"
fi

RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/tomcat4
return $RETVAL
}

------------------スクリプト抜粋--------------------------

 そんなわけで、この場合は「$RETVAL」の値をみてあげれば良さそうですけどいかがでしょうか?(「/usr/bin/dtomcat4」があればですが…^^;)

>>psコマンドは試そうとしたのですが、
>>シェルから確認する場合、複雑になるとのコトだったので
>>今回は見送ってしまいました。

ps -ax | grep tomcat > tomcatid.txt

 とかやってファイルを作って、ファイルサイズが0以上かどうかをチェック(「-s」でしたっけ?^^:)してあげれば良さそうですね。たぶん、思っているより難しくないと思いますよ(笑)



[ メッセージ編集済み 編集者: 水無月 遊々 編集日時 2004-01-16 14:19 ]
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-01-16 23:44
引用:

水無月 遊々さんの書き込み (2004-01-16 13:50) より:
ps -ax | grep tomcat > tomcatid.txt

 とかやってファイルを作って、ファイルサイズが0以上かどうかをチェック(「-s」でしたっけ?^^してあげれば良さそうですね。


それはまずいです。
一度試したくらいだと期待通りの動作をしているようにみえるかも
しれませんが、何度もテストしているとうまく行ってないことに
気づくでしょう。

Keisukeさんが書かれているように
> 妙な技巧をこらすよりも、tomcat.pid が作られるようにアカウントや
> パーミッションを検討するのが良いと思いますよ。
というのが本筋と思います。
ちいにぃさんが書かれているやり方でもいいと思いますが。
水無月 遊々
大ベテラン
会議室デビュー日: 2003/10/22
投稿数: 139
お住まい・勤務地: お星様☆彡
投稿日時: 2004-01-17 14:11
こんにちわっ! ゆうゆうです。
引用:

それはまずいです。
一度試したくらいだと期待通りの動作をしているようにみえるかも
しれませんが、何度もテストしているとうまく行ってないことに
気づくでしょう。



 すいません。どこら辺が悪いのかわかりませんでした^^;
サンプルを作成して(30分ぐらいかな)テストしたのですが…。
(一応、成功20回,失敗20回の合計40回ほどテストしました)
お教えいただければありがたく思いますm(..)m

--------------------以下、サンプルコード-----------------------
#!/bin/sh

TIME=0 #経過時間
SLEEP_TIME=1 #チェックする間隔(s)
TIMEOUT=10 #タイムアウトまでの時間(s)
APP=/usr/bin/gedit #アプリケーションの起動パス
APPNAME=gedit #起動するアプリケーション名(grepで検索)
PSLIST=/tmp/pslist.txt #psとgrepコマンドで出力されたファイルのリダイレクト

#プログラムの起動
$(echo $APP) &

#起動チェックルーチン
while [ true ] ; do

#リストの取得
ps -ax | grep -v grep | grep $APPNAME > $PSLIST

#ファイルが出来たか?
if [ -s $PSLIST ] ; then
echo OK
break
else
sleep $SLEEP_TIME
fi

#タイムアウトのチェック
TIME=`expr $TIME + $SLEEP_TIME`
if [ $TIME -gt $TIMEOUT ] ; then
echo NG
break
fi
done

#作業ファイルの削除
rm $PSLIST
--------------------以上、サンプルコード-----------------------

引用:

> 妙な技巧をこらすよりも、tomcat.pid が作られるようにアカウントや
> パーミッションを検討するのが良いと思いますよ。
というのが本筋と思います。



 これは、確かに同意します。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-01-17 14:41
引用:

ps -ax | grep tomcat > tomcatid.txt

 とかやってファイルを作って、ファイルサイズが0以上かどうかをチェック


と、
引用:

ps -ax | grep -v grep | grep $APPNAME > $PSLIST


とで違いがありますね。この違いがまずい結果を生みかねないことを
分かっているからこそ、後者のスクリプトにしたわけですよね。

いまの場合、netstat -a で判定できるのですから、grep を
二重にかけるより、そちらのほうがスマートかと。

ついでに、ファイルに出力するよりはパイプで wc -l にでも渡して
その結果をシェル変数に入れるほうがすっきりしてるんじゃあ
ないかと思います。そのシェル変数の内容によって、条件分岐する
ようにしておく、と。
水無月 遊々
大ベテラン
会議室デビュー日: 2003/10/22
投稿数: 139
お住まい・勤務地: お星様☆彡
投稿日時: 2004-01-17 15:06
 こんにちわ。ゆうゆうです。

引用:

とで違いがありますね。この違いがまずい結果を生みかねないことを
分かっているからこそ、後者のスクリプトにしたわけですよね。



 ああ、そういうことだったんですね。私的には「psをつかって、grepにて選別 → ファイルへという方向性で出来るのでは?」というのを示した(示したかった)つもりで、特に100%の回答を出したつもりはありませんでした^^; 実際、全くテストもしていませんでしたし^^;;; …なので、ご指摘を受けたときは私が論理的に不可能な方向性を提示したのかと思ってしまいました。解釈の行き違いだったんですね^^; 納得しました。

引用:

ついでに、ファイルに出力するよりはパイプで wc -l にでも渡して



 なるなる。参考になります。ありがとうございましたm(..)m
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2004-01-17 18:49
psの出力を利用することについて、1つだけ気になることがあります。

2003年5月に、Linux Users MLの「プロセスをスワップアウトさせない設定」と
いうスレッドにて、プロセスがスワップアウトされるとpsの出力が変化する、
とあります。
http://search.luky.org/linux-users.9/thrd9.html#08887

よって、grep tomcat で検索できないこともありえるのかもしれません。
私自身はこの話題に関しては追試していませんが、これが気になったので
最初の書き込み時点ではpsの出力を利用する、という選択肢を外しました。

# ちょっと気になった話題だったので記憶に残っていたのですが、
# でも、最初の書き込みの時点ではこの話題がどこのメーリングリスト
# に合ったかも忘れていたわけで。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-01-17 21:49
引用:

ちいにぃさんの書き込み (2004-01-17 18:49) より:
2003年5月に、Linux Users MLの「プロセスをスワップアウトさせない設定」と
いうスレッドにて、プロセスがスワップアウトされるとpsの出力が変化する、
とあります。


これは気づきませんでした。
てゆーか、カーネルのことはほとんど知らない><
LinuxカーネルにはU領域というものは無かったはずですが、
プロセスがスワップアウトするとカーネル側の情報も
主記憶からはある程度消されるということなんでしょうね。

さすがに、起動直後のプロセスがスワップアウトされることは
ないとは思いますが。

スキルアップ/キャリアアップ(JOB@IT)