Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash JBoss初始化脚本-陷阱问题_Bash_Jboss_Jboss7.x_Init.d_Shell Trap - Fatal编程技术网

Bash JBoss初始化脚本-陷阱问题

Bash JBoss初始化脚本-陷阱问题,bash,jboss,jboss7.x,init.d,shell-trap,Bash,Jboss,Jboss7.x,Init.d,Shell Trap,我有一个脚本,用于启动/停止JBossAS(v7.1.1)等。我在SUSE Enterprise 11上运行,因此提供的initscript无法工作。我的脚本遇到的问题是从未调用过cleanup函数 #!/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/standal

我有一个脚本,用于启动/停止JBossAS(v7.1.1)等。我在SUSE Enterprise 11上运行,因此提供的initscript无法工作。我的脚本遇到的问题是从未调用过cleanup函数

#!/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

我可能会感到困惑,但你能不能不这样做

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


$COMMAND会一直阻塞到我死,然后会有一个rm,然后子shell会退出?没有必要设陷阱。

我可能会感到困惑,但你能不能不这样做

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


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

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

LAUNCH_JBOSS_IN_BACKGROUND=true
在调用脚本之前,您将不再需要nohup来为您执行任务,并且不需要进行清理

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


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

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

LAUNCH_JBOSS_IN_BACKGROUND=true
在调用脚本之前,您将不再需要nohup来为您执行任务,并且不需要进行清理

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


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

我不知道这会奏效。我担心如果第一个命令被杀了,第二个命令将永远无法运行。我不知道这会起作用。我担心如果第一个命令被杀死,第二个命令将永远不会运行。我同意
killall java
是相当危险的。我在JBoss的服务器上安装了Java,所以我非常确定计算机上没有其他任何东西使用Java。我同意
killall Java
是相当危险的。我在JBoss的服务器上安装了Java,所以我非常确定在计算机上没有其他使用Java的东西。