JMS消息问题解决了,做事也要做一全套。由于项目已经成功部署,但是不代表以后运行中一直不会出现什么问题。结合以前项目的开发经验,自己又在现场编写了一个类似于看门狗功能的Linux可执行脚本。
如果是单独启动java 进程,脚本如下
以上执行脚本单独是可以运行的,但是把他们转换成具有自启动功能的脚本时就有问题了.Linux 系统中查看进程的命令有几种:
这个是查看系统中的java 进程,于是看到系统中有3个(tomcat、activemq、mqforwar)进程,没办法,这三个都是java 进程,不好判断啊,怎么办呢?
结果这种方式用在其他进程可以,后面的MQForward不是实际的进程名称,MQForward实际的进程名就是java。
最后一种,结合起来用
最终具有看门狗功能的脚本如下,
最后通过 nohup /JMS.sh start & 启动,可以测试下pkill java 后过一会儿会自动启动,然后把 nohup /JMS.sh start & 加到/etc/rc.local 中
如果是单独启动java 进程,脚本如下
#!/bin/bash
#配置文本目录
MQ_HOME="/usr/MQ"
JDK_ROOT="/bin/jdk1.6.0_06"
JDK_CMD="$JDK_ROOT/bin/java"
echo "---------------------------------1"
export_to_classpath_if_nonexistent() {
if [ $# = 1 ]; then
if ! echo $CLASSPATH | grep $1 > /dev/null; then
export CLASSPATH=$CLASSPATH:$1
fi
fi
}
#使JAVA环境变量生效
export JAVA_HOME=$JDK_ROOT
export CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
#导入程序所需要的jar 包
echo "---------------------------------2"
export_to_classpath_if_nonexistent $MQ_HOME/bin
export_to_classpath_if_nonexistent $MQ_HOME/lib/activemq-all-5.2.0.jar
export_to_classpath_if_nonexistent $MQ_HOME/lib/MQ.jar
export_to_classpath_if_nonexistent $MQ_HOME/lib/log4j-1.2.15.jar
#这个是启动ActiveMQ Admin 服务程序,并将启动后的日志输出到日志文件中, 其中& 表示在后台运行,在用看门狗功能的时候,这几段需要注释掉
echo "---------------------------------3"
/usr/apache-activemq-5.2.0/bin/activemq >> /usr/MQ/logs/activeMQServer.log &
sleep 15
echo "Active MQ server started..."
#进入MQForward 目录,运行接收转发消息程序
cd $MQ_HOME
java com.mq.MQForward &
以上执行脚本单独是可以运行的,但是把他们转换成具有自启动功能的脚本时就有问题了.Linux 系统中查看进程的命令有几种:
ps aux |grep java
这个是查看系统中的java 进程,于是看到系统中有3个(tomcat、activemq、mqforwar)进程,没办法,这三个都是java 进程,不好判断啊,怎么办呢?
ps -e | grep MQForward
结果这种方式用在其他进程可以,后面的MQForward不是实际的进程名称,MQForward实际的进程名就是java。
最后一种,结合起来用
ps aux|grep "activemq"|grep -v grep
最终具有看门狗功能的脚本如下,
#!/bin/bash
#
#
# Source function library.
. /etc/rc.d/init.d/functions
MQFARWORD_PATH=/usr/MQ
MQSERVER_PATH=/usr/apache-activemq-5.2.0
MQLOG_PATH=/usr/MQ/logs
#控制改服务是否启动1 启动, 0 不启动
MQFarword=1
MQServer=1
start()
{
# Start daemons.
date >> $MQLOG_PATH/MQ.log
echo "Starting activeMQ......" >> $MQLOG_PATH/MQ.log
while true; do
#run activeMQ admin need to run,first run it!
if !(ps aux|grep "activemq"|grep -v grep) >/dev/null ; then
if [ -f $MQSERVER_PATH/bin/activemq ] && [ $MQServer = "1" ] ; then
/usr/apache-activemq-5.2.0/bin/activemq >> $MQLOG_PATH/activeMQServer.log &
echo "Starting activeMQ Server:" >> $MQLOG_PATH/MQ.log
echo_success >> $MQLOG_PATH/MQ.log
fi
sleep 12
fi
# run MQFarword
if !(ps aux| grep "com.mq.MQForward" | grep -v grep) >/dev/null ; then
if [ -f $MQFARWORD_PATH/activeMQ.sh ] && [ $MQFarword = "1" ] ; then
/usr/MQ/activeMQ.sh >> $MQLOG_PATH/MQ.log
echo "Starting MQForward:" >> $MQLOG_PATH/MQ.log
echo_success >> $MQLOG_PATH/MQ.log
fi
fi
sleep 30
done
return 0
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
esac
exit $RETVAL
最后通过 nohup /JMS.sh start & 启动,可以测试下pkill java 后过一会儿会自动启动,然后把 nohup /JMS.sh start & 加到/etc/rc.local 中