最近 Ricky 这边又有一个需求,当检测到服务器(操作系统依旧为:CentOS Linux )上的 resin 进程挂掉或者操作系统的可用物理内存、可用 Swap 分区不足时,自动重启 resin 的进程(什么是 resin ?resin 与 tomcat 是类似的,您就把它当做 tomcat 来看待就好了)。
Linux Shell 脚本主要实现以下功能:
- 每 30 秒检测一次;
- 当检测到进程挂掉时,自动重启相关进程;
- 当操作系统的可用物理内存低于 150 MB 时,自动重启相关进程;
- 当操作系统的可用 Swap 分区低于 400 MB 时,自动重启相关进程;
- 将自动重启的时间和原因记录到日志文件中。
部署:
1 、编写脚本,在命令行界面输入:
[root@host ~]# vi /root/port.sh
键入小写字母 i ,进入编辑模式,将以下脚本复制粘贴进去(请根据实际需要进行相应地修改):
#!/bin/bash # 加载环境变量 source /etc/profile # resin 监听的端口号为 8080 ,检查 8080 端口是否有进程在监听 port=`netstat -ntlp | grep -c ":8080"` #echo $port # 如果 8080 端口没有进程在监听 if [ "$port" = "0" ]; then # 则重新启动 resin 的进程 /usr/java/resin/bin/httpd.sh start # 将日志写入日志文件 echo $(date "+%F %H:%M:%S") - already restart port - process not found >> /root/port.log # 如果 8080 端口有进程在监听 elif [ "$port" = "1" ]; then let memory_free=`free -m | grep Mem: | awk -F ' ' '{print $4}'` let swap_free=`free -m | grep Swap: | awk -F ' ' '{print $4}'` # 可用物理内存低于 150 MB 时重启 resin ,并将日志写入日志文件 if [ $memory_free -lt 150 ] ; then /usr/java/resin/bin/httpd.sh restart echo $(date "+%F %H:%M:%S") - already restart port - memory_free lt 150 >> /root/port.log # 可用 Swap 分区低于 400 MB 时重启 resin ,并将日志写入日志文件 elif [ $swap_free -lt 400 ] ; then /usr/java/resin/bin/httpd.sh restart echo $(date "+%F %H:%M:%S") - already restart port - swap_free lt 400 >> /root/port.log fi fi
按一次 ESC 键退出编辑模式,然后键入 “ :wq ” 保存并退出。
2 、……
剩余的步骤请参见这篇文章:《使用 Linux Shell 脚本定时监控 web 服务(进程挂掉自动重启服务和检测首页是否能返回状态码 200 )》
日志格式说明:
[root@host ~]# cat /root/port.log 2018-09-18 11:50:04 - already restart port - process not found 2018-10-16 21:10:03 - already restart port - memory_free lt 150 2018-10-16 21:12:46 - already restart port - swap_free lt 400 [root@host ~]#
日志格式为:时间 – already restart port – 重启原因,其中重启原因有三种:
- process not found :检测到相关进程不存在;
- memory_free lt 150 :检测到操作系统的可用物理内存低于 150 MB ;
- swap_free lt 400 :检测到操作系统的可用 Swap 分区低于 400 MB 。
其他相关文章:
发表评论?