JBoss Init Script - 陷阱问题

时间:2012-07-12 20:10:06

标签: bash jboss jboss7.x init.d shell-trap

我有一个脚本,我用来启动/停止/等JBoss AS(v7.1.1)。我在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

2 个答案:

答案 0 :(得分:2)

standalone.sh启动脚本中提供了一种方法,可用于控制其行为。只需将环境变量LAUNCH_JBOSS_IN_BACKGROUND的值设置为某个值,即

LAUNCH_JBOSS_IN_BACKGROUND=true

在调用脚本之前,你将不再需要nohup为你完成这项工作,并且不需要进行清理。

此外,还有一个选项可以告诉JBoss AS将“控制台输出”写入文件,因此您仍然可以获得它将生成的消息。

还有一件事:我个人认为killall java在所有可能的情况下都不是100%聪明的事情。

答案 1 :(得分:1)

我可能会感到困惑,但你能做到吗

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

$ COMMAND会阻塞直到我死了然后会有一个rm然后子shell会退出?不需要陷阱。