0

我有一个用于启动/停止/等 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
4

2 回答 2

2

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

LAUNCH_JBOSS_IN_BACKGROUND=true

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

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

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

于 2012-11-13T11:01:55.723 回答
1

我可能会感到困惑,但你能不能不只是做

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

?

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

于 2012-07-12T20:22:32.637 回答