質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

3回答

5610閲覧

tomcatの起動シェル

isamua

総合スコア20

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2015/11/20 09:10

編集2015/11/20 09:12

tomcatの起動シェルを作っているのですが、止まった状態でservice tomcat startといれてもtomcat is already runningの一点張りで起動してくれません。
また、起動している状態でservice tomcat stopと入れても、
NGとでます。
どこを直せばよいでしょうか?

cat /etc/rc.d/init.d/tomcat
#!/bin/bash

tomcat Startup script for the Apache Tomcat

description: Apache Tomcat is an open source software implementation of the Java Servlet and JavaServer Pages technologies.

Source function library.

. /etc/rc.d/init.d/functions

prog='tomcat'
user='usa'
exec='/usr/ss/tomcat/bin'
GREP='ps aux | grep tomcat | grep -v grep | wc -l'

start() {
if [ "$GREP" = 0 ]; then
su - $user -c "$exec/startup.sh"
sleep 5
if [ "$GREP" = 0 ]; then
echo "NG"
else
echo "OK"
fi
else
echo "$prog is already running "
fi
}

stop() {
if [ "$GREP" = 0 ]; then
echo "$prog is already stopping."
else
su - $user -c "$exec/shutdown.sh"
sleep 5
if [ "$GREP" = 0 ]; then
echo "OK"
else
echo "NG"
fi
fi
}

See how we were called.

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 3
start
;;
*)
echo $"Usage: $prog {start|stop|restart}"
exit 2
esac

exit

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

GREP= 箇所は「'」(シングルクォート)ではなく、「`](バッククォート)にして、コマンド実行結果を代入したいのではないでしょうか。

また、変数 $GREP はスクリプト実行時に最初に 1回だけ設定された値が、startup.sh, shutdown.sh 実行後の $GREP でも参照されると思います(都度、コマンドが実行されるわけではない)。
sh -x /etc/rc.d/init.d/tomcat start でデバッグするといいと思います。

自作してもいいと思いますが、CentOS で提供されている tomcat の RPMファイルから起動スクリプトを抜き出して参考にするのはいかがでしょうか。

wget -N http://ftp.iij.ad.jp/pub/linux/centos/6.7/os/x86_64/Packages/tomcat6-6.0.24-90.el6.x86_64.rpm rpm2cpio tomcat6-6.0.24-90.el6.x86_64.rpm|cpio -imdu "*init.d*" less etc/rc.d/init.d/tomcat6

投稿2015/11/20 09:40

TaichiYanagiya

総合スコア12141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

isamua

2015/11/20 09:58

変更して sh -x /etc/rc.d/init.d/tomcat start を実行したところ GREP=2 になっていました。 たぶんシェルの実行中なので数値が2個出てきているかもしれません。
退会済みユーザー

退会済みユーザー

2015/11/20 09:58

確かに。。。GREP='****’とシングルクォートで囲んであると、GREP変数の中身はここに書かれた文字列になっちゃいますから、100%「if [ "$GREP" = 0 ]; はfalseですね。
isamua

2015/11/20 10:00

GREP中身をps aux | grep tomcat | grep -v grep | grep -v root | wc -lにしたらきどうできました 。
Ken.sakanakana

2015/11/20 12:36

grep tomca[t] とすると、 grep -v grep はいらなくなりますよ :-)
guest

0

if文の判定(testコマンドの比較指示子)の書き方がダメなのでは?

sh

1誤)if [ "$GREP" = 0 ]; then 2 3正)if [ "$GREP" -eq 0 ]; then

たぶん、数値を文字のように比較しているので、判定結果が常に false になっているのだと思います。

投稿2015/11/20 09:31

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

isamua

2015/11/20 09:35

ご指摘の箇所を修正し、実行したところ /etc/init.d/tomcat: line 17: [: ps aux | grep tomcat | grep -v grep | wc -l: 指 数の表現を期待 tomcat is already running とエラーが帰ってきました。
takito

2015/11/20 09:38 編集

ダブルクォートが不要で if [ $GREP -eq 0 ] ですかね
isamua

2015/11/20 09:40

ダブルクォータをはずすと /etc/init.d/tomcat: line 17: [: 引数が多すぎます tomcat is already running となります。
isamua

2015/11/20 09:44

sh -x /etc/rc.d/init.d/tomcat start だと + exec=/usr/local/tomcat8/bin + GREP='ps aux | grep tomcat | grep -v grep | wc -l' + case "$1" in + start + '[' ps aux '|' grep tomcat '|' grep -v grep '|' wc -l -eq 0 ']' /etc/rc.d/init.d/tomcat: line 17: [: 引数が多すぎます となるんですよね
pi-chan

2015/11/20 11:51

おっと、失礼しました…… そもそも、これが違います! 「GREP='ps aux | grep tomcat | grep -v grep | wc -l'」 シングルクオート「'」で括ると、GREPの中には「ps aux | grep tomcat | grep -v grep | wc -l」という文字列が格納されるだけなので、ゼロと比較しても無意味です。 この場合は「ps aux | grep tomcat | grep -v grep | wc -l」の実行結果をGREPに代入したいので、バッククオート「`」で括らないとダメですね。 「GREP=`ps aux | grep tomcat | grep -v grep | wc -l`」
guest

0

GREP='ps aux | grep tomcat | grep -v grep | wc -l'

単純に、この結果が常に 0 以外になってませんか?

投稿2015/11/20 09:26

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

isamua

2015/11/20 09:32

それを疑って調べましたがやはり0でした。 もうわけがわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問