Linux看门狗脚本 1.4
Linux 脚本 1.4 看门狗
2023-09-14 09:07:58 时间
近期项目的看门狗经历了三个版本号。
第一个版本号:
用ps -ef,假设程序挂了就启动
第二个版本号:
程序因为执行时会出现不再监听7901port,所以不能简单推断机器是不是挂了,而是推断此port是否有监听
第三个版本号:
当7901port不再监听,就先把原来的killall再启动。每次输出到文件的内容都加日期,要不然根本不知道这事情啥时候发生的
第四个版本号:
使用nohup让程序和监控程序的echo输出到非标准设备而是文件。这样彻底脱离shell,从而退出一个shell的时候真正实现后台执行
老版本号例如以下:
#!/bin/sh set +x source env.sh PRMGRAM=scp_platform FILE_NAME=scp_monitor.log Current_Time=`date +"%Y-%m-%d %H:%M:%S.%N"` echo "[${Current_Time}] monitor start...." echo "[${Current_Time}] monitor start...." >> ${WORK_DIR}/log/${FILE_NAME} port=7905 TCPListeningnum=`netstat -an | grep ":$port " | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l` if [ $TCPListeningnum = 1 ] then { echo "[${Current_Time}] The $port is listening" } else { echo "[${Current_Time}] The port is not listening" } fi while [ 1 ] do Current_Time=`date +"%Y-%m-%d %H:%M:%S.%N"` TCPListeningnum=`netstat -an | grep ":$port " | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l` if [ $TCPListeningnum = 1 ] then { echo "[${Current_Time}] The ${port} is listening" >> ${WORK_DIR}/log/${FILE_NAME} } else { echo "[${Current_Time}] The ${port} is not listening" >> ${WORK_DIR}/log/${FILE_NAME} echo "[${Current_Time}] killall scp_platform now !" >> ${WORK_DIR}/log/${FILE_NAME} kscp echo "[${Current_Time}] check ${PRMGRAM} quit, now restart ${PRMGRAM} ..." >> ${WORK_DIR}/log/${FILE_NAME} scp_platform& } fi sleep 180 done
新版本号例如以下:
start_monitor.sh #此脚本负责将monitor后台执行
#!/bin/bash #start monitor background without console!! nohup ./monitor.sh &
monitor.sh #实际的monitor监控程序
#!/bin/bash set -x nohup ./env.sh & PRMGRAM=scp_platform FILE_NAME=scp_monitor.log Current_Time=`date +"%Y-%m-%d %H:%M:%S.%N"` echo "[${Current_Time}] monitor start...." echo "[${Current_Time}] monitor start...." >> ${WORK_DIR}/log/${FILE_NAME} port=7905 TCPListeningnum=`netstat -an | grep ":$port " | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l` if [ $TCPListeningnum = 1 ] then { echo "[${Current_Time}] The $port is listening" } else { echo "[${Current_Time}] The port is not listening" } fi while [ 1 ] do Current_Time=`date +"%Y-%m-%d %H:%M:%S.%N"` TCPListeningnum=`netstat -an | grep ":$port " | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l` if [ $TCPListeningnum = 1 ] then { echo "[${Current_Time}] The ${port} is listening" >> ${WORK_DIR}/log/${FILE_NAME} } else { echo "[${Current_Time}] The ${port} is not listening" >> ${WORK_DIR}/log/${FILE_NAME} echo "[${Current_Time}] killall scp_platform now !" >> ${WORK_DIR}/log/${FILE_NAME} killall scp_platform echo "[${Current_Time}] check ${PRMGRAM} quit, now restart ${PRMGRAM} ..." >> ${WORK_DIR}/log/${FILE_NAME} nohup scp_platform& } fi sleep 180 done
这里之所以要sleep 180是是由于程序载入实际略微有点长,要不然载入还没完毕的时候是不能够推断有没有监听7905port的
原来版本号的env.sh #无需改动就可以使用
env.sh主要是环境变量设置和自己定义的变量
#bin/bash export ROOT=/root/scp export WORK_DIR=${ROOT} export INCLUDE=${ROOT}/include export OTL=${INCLUDE}/otl_mysql export LD_LIBRARY_PATH=${ROOT}/lib:/usr/local/lib export ACE_ROOT=${INCLUDE} export ODBCINI=/usr/local/etc/odbc.ini export ODBCSYSINI=/usr/local/etc PATH=${PATH}:${ROOT}/bin export PATH odbcinst -j alias wk='cd ${ROOT}' alias bin='cd ${ROOT}/bin' alias cfg='cd ${ROOT}/conf' alias rmlog='rm -rf ${ROOT}/bin/log*.*; rm -rf ${ROOT}/log/*.*' alias lis='netstat -an|grep -i 7905' alias scp='${ROOT}/bin/scp_platform &' alias moni='${ROOT}/bin/monitor.sh &' alias myps='ps -fu root|grep -v grep|grep -i scp' alias mymoni='ps -fu root|grep -v grep|grep -i moni' alias kscp='killall -9 scp_platform' alias kmoni='killall -9 monitor.sh' isql alias mynet='netstat -an | grep 7905' ulimit -c unlimited ulimit -n 65530
相关文章
- 快速部署Linux服务器——脚本篇(linux部署脚本)
- Linux驱动块设备之旅(linux块设备)
- 进程Linux 脚本实现守护进程功能(linux脚本守护)
- Linux查看登录日志:一步一步操作指南(linux查看登陆日志)
- 自动化Linux系统开机脚本实现(linux开机脚本)
- Shell脚本为Linux带来无限可能(shell脚本linux)
- 解锁Linux脚本之魅力:正确的使用注释(linux脚本注释)
- 谱Linux家族图谱:众多发行版组成的完整景象(linux家族图)
- Linux 命令行与 Shell 脚本编程宝典(linux命令行和shell脚本编程宝典)
- Linux下的音乐天堂(音乐linux)
- 以Linux U盘启动系统:新的启动方式(linux的u盘启动)
- Linux分支:突破技术限制的新纪元(linux的分支)
- Linux网络配置教程:快速连接VPN的方法(linux如何连接vpn)
- 详解Linux网卡驱动编译方法(linux编译网卡)
- Linux脚本管理安全密码(linux脚本密码)
- 口脚本Linux小端口脚本编程实战(linux小端)
- Linux下执行安装命令指南(linux执行安装命令)
- 「教程」如何使用Linux脚本实现延时操作(linux脚本延时)
- 嵌入式Linux实现键盘控制:从硬件设计到软件程序(嵌入式linux键盘)
- Linux下如何进行时间同步?(时间同步linux)
- Linux环境下自动删除脚本的应用(linux 自动删除脚本)
- Linux 系统下修改密码的快捷脚本(linux 修改密码脚本)
- Linux下运行Shell脚本的简单使用技巧(linux运行shell脚本)
- 脚本Linux 中快速调用 sh 脚本的小技巧(linux调用sh)