rocketmq学习笔记 ---- 使用shell脚本自动启动RocketMQ

由于公司每天需要关闭测试服务器,所以每天上班的第一件事就是启动测试服务器上的服务。作为一名程序员,这种程序化事情最好可以由程序来执行。

1、rc.local中启动

  • 打开文件/etc/rc.local,在文件末尾追加写入启动命令:
export JAVA_HOME=/usr/local/jdk
ROCKETMQ_HOME=/app/rocketmq
nohup sh $ROCKETMQ_HOME/bin/mqnamesrv >> $ROCKETMQ_HOME/namesrv.log 2>&1 &
nohup sh $ROCKETMQ_HOME/bin/mqbroker -n "10.9.200.245:9876" -c $ROCKETMQ_HOME/conf/2m-noslave/broker-a.properties >> $ROCKETMQ_HOME/broker.log 2>&1 &

其中,导出环境变量JAVA_HOME这一步是必不可少的,不然启动会报错。如果是在命令行中启动RocketMQ是不需要导出JAVA_HOME的。这是因为JAVA_HOME一般是在/etc/profile中导出的,而启动脚本rc.local是在系统启动的时候执行的,优先于profile执行。因而rc.local执行的时候,相当于JAVA_HOME是没有被设置的,而RocketMQ的启动脚本中引用到该环境变量,因此这里必须导出JAVA_HOME。

  • 检查rc.local的是否有执行权限,如果没有,加上执行权限。
chmod +x /etc/rc.local
  • 重启系统,检查RocketMQ是否启动。
ps -ef |grep rocket

 

2、init.d中启动

  • 打开文件夹/etc/init.d,分别创建两个脚本rocketmq-namesrv和rocketmq-broker。
  • 编辑脚本rocketmq-namesrv,脚本命令如下:
#!/bin/sh
#chkconfig: 2345 65 35
#description: start or stop rocketmq using chkconfig

dir=/app/rocketmq/bin
export JAVA_HOME=/usr/local/jdk
ret=0

start() {
	if [-f $dir/mqnamesrv ]; then
		echo "starting rocketmq namesrv.."
		cd $dir
		nohup sh mqnamesrv >> namesrv.log 2>&1 &
		ret=$?
		echo "start sucess"
		return $ret
	fi
}

stop() {
	if [ -f $dir/mqshutdown ]; then
		echo "stopping rocketmq namesrv.."
		cd $dir
		./mqshutdown namesrv
		ret = $?
		echo "stop success"
		return ret
	fi
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart)
		echo "restarting rocketmq namesrv.."
		$0 stop
		sleep 1
		$0 start
		;;
	*)
		echo $"Usage:$0 {start|stop|restart}"
		exit 1
		;;
esac

exit $ret
  • 给脚本添加执行权限,并使用chkconfig命令添加到启动列表中:
chmod +x rocketmq-namesrv
chkconfig --add rocketmq-namesrv
  • 重启测试脚本是否启动

注意:

rocketmq-namesrv脚本中的第2-3行是必须的,它标记该脚本是可以加入开机启动项脚本中,否则在运行chkconfig --add rocketmq-namesrv时会报错。

#chkconfig: 2345 65 35
#description: start or stop rocketmq using chkconfig
其中第二行,chkconfig后面有三个参数2345,65和35表明,在运行chkconfig --add rocketmq-namesrv命令时,需要在rc2.d~rc5.d目录下,创建名字为 S65rocketmq-namesrv的文件连接,同时在rc0.d和rc6.d目录下,创建名字为K35rocketmq-namesrv的文件连接。这些文件会连接到/etc/init.d目录下的的rocketmq-namesrv脚本。

如果文件名的第一个字符是S,表示系统在启动的时候,运行脚本rocketmq-namesrv,就会添加一个start参数,告诉脚本,现在是启动模式。相当于执行如下命令:

rocketmq-namesrv start

若第一个字符为K,在关闭系统的时候,会运行rocketmq-namesrv,添加一个stop参数,告诉脚本,现在是关闭模式。相当于执行命令:

rocketmq-namesrv stop

而脚本S65rocketmq-namesrv中的数字65来自脚本第二行的第二个数字,表示该脚本在所有开机脚本中的执行顺序的排序权重。K35rocketmq-namesrv表示关闭时,该脚本在所有关闭脚本中的执行顺序的排序权重。一般两者相加等于100,表示越后执行的开机脚本,需要越早进行关闭,用户也可以根据自己的需求更改启动顺序。

以上,开机自启动项就设置完成了,以后就可以不用每天启动测试服务器上服务了。

你可能感兴趣的:(linux)