|
先贴代码(整个脚本):
(在线剪贴板)
https://paste.ubuntu.com/p/S5mxS5GNHg/
问题:(脚本33-55行)函数中有while循环以及多个if判断语句,将该脚本作为启动命令写入systemd.unit但无法启动;若将while循环以及只保留一个if判断语句,则该systemd.unit可以启动成功。
我的分析:systemd.uniut本身带有进程守护,脚本中带有判断条件,造成systemd判断条件重复,因此无需要给到systemd判断条件,只需为其明确执行的指令即可?
该systemd.unit写法:
- [Unit]
- Description=rocketmq
- After=network.target
- [Service]
- User=root
- Type=forking
- ExecStart=/opt/rocketmq-4.8.0/mqinit2 start
- ExecStop=/opt/rocketmq-4.8.0/mqinit2 stop
- ExecReload=/opt/rocketmq-4.8.0/mqinit2 restart
- Restart=on-failure
- RestartSec=6
- LimitNOFILE=65536
- [Install]
- WantedBy=multi-user.target
复制代码
执行systemctl start rocketmq,却超时了:
Job for rocketmq.service failed because a timeout was exceeded. See "systemctl status rocketmq.service" and "journalctl -xe" for details.
执行失败的代码(有while循环):
- function start_broker() {
- while true
- do
- get_broker_pid
- if [[ -n ${BROKER_PID} ]]; then
- echo -e "\033[1;42;37m +++ The RocketMQ_broker(${BROKER_PID}) is already exsit... \033[0m"
- break
- else
- cd ${ROCKETMQ_BIN} || exit
- nohup sh mqbroker -c ${CONF_DIR} -n ${ADDR}:${NAMESRV_PORT} > ${BROKER_RUN_LOG} 2>&1 &
- sleep 1
- #重新获取PID
- get_broker_pid
- if [[ -z ${BROKER_PID} ]]; then
- echo -e "\033[1;41;37m *** The RocketMQ_broker boot Faild!! \033[0m"
- else
- echo -e "\033[1;42;37m ### The RocketMQ_broker(${BROKER_PID}) boot successfully!! \033[0m"
- break
- fi
- fi
- done
- }
复制代码
看了下日志,都是满足了我写的if判断中变量为空值时的输出,并且时间间隔都是写好的休眠时间 sleep 1:
- May 20 15:55:51 hyd021_dev-middleware-1 mqinit2[3605]: *** The RocketMQ_namesrv boot Faild!!
- May 20 15:55:52 hyd021_dev-middleware-1 mqinit2[3605]: *** The RocketMQ_namesrv boot Faild!!
- May 20 15:55:53 hyd021_dev-middleware-1 mqinit2[3605]: *** The RocketMQ_namesrv boot Faild!!
- May 20 15:55:54 hyd021_dev-middleware-1 mqinit2[3605]: *** The RocketMQ_namesrv boot Faild!!
- May 20 15:55:55 hyd021_dev-middleware-1 mqinit2[3605]: *** The RocketMQ_namesrv boot Faild!!
复制代码
并且我将while循环部分全部去掉,仍然启动失败,最后我只保留了一个if语句,则能够启动成功
能够执行成功的代码:
- function start_broker() {
- cd ${ROCKETMQ_BIN} || exit
- nohup sh mqbroker -c ${CONF_DIR} -n ${ADDR}:${NAMESRV_PORT} > ${BROKER_RUN_LOG} 2>&1 &
- sleep 2
- #重新获取PID
- get_broker_pid
- if [[ -z ${BROKER_PID} ]]; then
- echo -e "\033[1;41;37m *** The RocketMQ_broker boot Faild!! \033[0m"
- else
- echo -e "\033[1;42;37m ### The RocketMQ_broker(${BROKER_PID}) boot successfully!! \033[0m"
- fi
- }
复制代码
求解惑,谢谢!
@G.K.D |
|