我有一个脚本,我用来启动/停止/等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
答案 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会退出?不需要陷阱。