由于公司每天需要关闭测试服务器,所以每天上班的第一件事就是启动测试服务器上的服务。作为一名程序员,这种程序化事情最好可以由程序来执行。
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,表示越后执行的开机脚本,需要越早进行关闭,用户也可以根据自己的需求更改启动顺序。
以上,开机自启动项就设置完成了,以后就可以不用每天启动测试服务器上服务了。