0

JBoss AS (v7.1.1) を開始/停止/etc するために使用するスクリプトを作成しています。SUSE Enterprise 11 で実行しているため、提供された initscript が機能しません。スクリプトで発生している問題は、クリーンアップ関数が呼び出されないことです。

#!/bin/sh

HOME="/var/rulesserver"
CURRENT=$HOME/logs/current
LOGFILE=$HOME/logs/`date -u +%Y-%m-%d-%H-%M-%S`.log
COMMAND=/usr/local/jboss/bin/standalone.sh
SELF=/usr/sbin/jboss-as-standalone

function cleanup() {
    rm $CURRENT
}

function run() {
    trap cleanup 1 2 3 6 15
    nohup $COMMAND &> $CURRENT
}

case $1 in
    "start" )
        echo "Starting the server..."
        if [ -e $CURRENT ]
        then
            echo "ERROR: The server is already running"
        else
            ln -s $LOGFILE $CURRENT
            run &
            echo "Server started"
        fi
        ;;
    "stop" )
        echo "Stopping the server..."
        killall java
        echo "Server stopped"
        ;;
    "status" )
        if [ -e $CURRENT ]
        then
            echo "The server is currently running"
        else
            echo "The server is currently stopped"
        fi
        ;;
    "cleanup" )
        cleanup
        ;;
    "restart" )
        $SELF stop
        $SELF start
        ;;
    * )
        $SELF start
        ;;
esac
4

2 に答える 2

2

standalone.sh 起動スクリプトには、その動作を制御するために使用できるメソッドが用意されています。環境変数 LAUNCH_JBOSS_IN_BACKGROUND の値を何らかの値に設定するだけです。

LAUNCH_JBOSS_IN_BACKGROUND=true

スクリプトを呼び出す前に、nohup でジョブを実行する必要がなくなり、クリーンアップも不要になります。

また、JBoss AS に「コンソール出力」をファイルに書き込むように指示するオプションがあるため、生成されるメッセージを引き続き保持できます。

もう 1 つ: 個人的には、考えられるkillall javaすべての状況でそれを行うのが 100% 賢いことだとは思いません。

于 2012-11-13T11:01:55.723 に答える
1

私は混乱するかもしれませんが、あなたはただできないのですか?

function run() {
    ( nohup $COMMAND ; rm $CURRENT )
}

?

$COMMAND は私が死ぬまでブロックし、その後 rm があり、サブシェルが終了しますか? トラップは必要ありません。

于 2012-07-12T20:22:32.637 に答える