Linux设置开机自启keepalived+nginx服务
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
目录
背景
在工作突发遇见了Linux虚拟机所在的宿主机重启了虚拟机上部署nginx+keepalived服务但是宿主机重启之后发现虚拟机重启了但是在虚拟机上部署的nginx服务和keepalived服务没有起来经过分析发现是因为设置的开机自启脚本存在问题导致的。
分析过程
首选通过who -b查看最近的虚拟机重启的时间节点
[root@localhosts ~]# who -b system boot 2023-02-08 10:47 [root@localhosts ~]# who -r run-level 3 2023-02-08 10:48
注
who -b ---查看最后一次上次系统启动的时间
who -r ---查看最后一次上次系统启动的时间及运行级别
检查nginx服务和keepalived服务的运行状态
[root@localhosts ~]# ps -ef | grep nginx root 25312 25095 0 11:32 pts/2 00:00:00 grep --color=auto nginx [root@localhosts ~]# ps -ef | grep keepalived root 25397 25095 0 11:32 pts/2 00:00:00 grep --color=auto keepalived
注: 发现nginx服务和keepalived服务都没有开机自启运行起来。
检查开机配置是否设置
[root@localhosts ~]# cat /etc/rc.d/rc.local #!/bin/bash /usr/sbin/keepalived -D
注发现keepalived的有设置开机但是为什么keepalived服务也没有起来呢
一般情况下keepalived运行的时候都会做一个检查脚本脚本通过之后就运行起keepalived的是否需要杀掉运行的keepalived服务。
检查keepalived服务的检查脚本
[root@localhosts keepalived]# cat /etc/keepalived/check_nginx.sh #! /bin/bash num=`netstat -an | grep "0.0.0.0:8022"|wc -l` if [ $num -eq 0 ]; then su - mwop -c "/app/nginx/bin/nginx.sh start" sleep 3 num=`netstat -an | grep "0.0.0.0:8022"|wc -l` if [ $num -eq 0 ]; then killall keepalived fi fi
注发现keepalived的检查脚本存在问题因为nginx服务的启动路径是
sh /app/server/nginx/bin/nginx.sh start
这样的话虽然开机自启了keepalived服务但是因为keepalived服务的检查脚本检验不通过导致keepalived服务停止运行同时nginx服务没有单独的自启脚本所以就导致了nginx服务和keepalived服务都是无运行的状态。
解决方案
因为已经分析到了原因就是keepalived的检查脚本有问题所以只要修复keepalived的检查脚本即可但是如果还想为了更全面的考虑可以在/etc/rc.d/rc.local脚本中再加入nginx的启动命令这样就做到了万无一失的效果下面的两种解决方案都会写一下的以供各位参考。
解决方案一
修复后的keepalived的检查脚本如下
[root@localhosts keepalived]# cat /etc/keepalived/check_nginx.sh #! /bin/bash num=`netstat -an | grep "0.0.0.0:8022"|wc -l` if [ $num -eq 0 ]; then su - mwop -c "/app/server/nginx/bin/nginx.sh start" sleep 3 num=`netstat -an | grep "0.0.0.0:8022"|wc -l` if [ $num -eq 0 ]; then killall keepalived fi fi
注这样就可以了可以重启一下虚拟机验证一下是否可以开机自启起来nginx服务和keepalived服务。
解决方案二
修复keepalived的检查脚本同时在/etc/rc.d/rc.local中加入nginx服务的启动命令
[root@localhosts keepalived]# cat /etc/keepalived/check_nginx.sh #! /bin/bash num=`netstat -an | grep "0.0.0.0:8022"|wc -l` if [ $num -eq 0 ]; then su - mwop -c "/app/server/nginx/bin/nginx.sh start" sleep 3 num=`netstat -an | grep "0.0.0.0:8022"|wc -l` if [ $num -eq 0 ]; then killall keepalived fi fi
[root@localhosts ~]# cat /etc/rc.d/rc.local #!/bin/bash /usr/sbin/keepalived -D su - mwop -c "/app/server/nginx/bin/nginx.sh start"
注这样做的意义是给nginx服务的启动增加了两层保障。