近期项目的看门狗经历了三个版本号。

第一个版本号:

用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看门狗脚本 1.4的更多相关文章

  1. 简单的linux看门狗脚本

    watchdog.sh #!/bin/bash now=`date '+%Y-%m-%d %H:%M:%S'` baseDir=$(cd `dirname $0`; pwd) sleepTime=10 ...

  2. 一个软件实现的Linux看门狗—soft_wdt

    soft_wdt(下面简称本软件)是一个软件实现的Linux看门狗. 本软件是一款开源.免费软件. 下载地址: https://github.com/sunmingbao/soft-wdt/archi ...

  3. linux shell实现守护进程 看门狗 脚本

    嵌入式初学者,第一次上传代码.昨天做了一个udhcpd与udhcpc的守护,目前只会用shell模仿编写,还有什么方法可以做守护呢? ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  4. shell 之 用linux定时任务crontab和watchdog.sh脚本做软件看门狗

    1.简介 看门狗的作用是定期检测服务正常运行,如果发现服务不在了,会重新拉起服务:linux中可以利用系统的定时任务功能crontab定期的去执行watchdog.sh脚本,而watchdog.sh脚 ...

  5. Linux编程之《看门狗进程》

    Intro 当我们编写服务器代码时,为了让自己的服务器在意外崩溃时能够及时的重启,软件看门狗就显示出它的作用了,该看门狗进程是通过fork一个子进程(业务进程),父进程一旦捕获到了子进程的结束信号就重 ...

  6. [看门狗]基于Linux的嵌入式系统全程喂狗策略

    转自:http://blog.csdn.net/erickhuang1989/article/details/8721548 在嵌入式系统中,为了使系统在异常情况下能自动恢复,一般都会引入看门狗电路. ...

  7. linux设备驱动归纳总结(十一):写个简单的看门狗驱动【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-112879.html linux设备驱动归纳总结(十一):写个简单的看门狗驱动 xxxxxxxxxxx ...

  8. Linux 下如何使用看门狗

      Linux内核有集成WD的选项.将其使能后,系统里就会有watchdog的设备驱动:/dev/watchdog.这样,在应用程序里只需打开这个设备使用即可:#include <fcntl.h ...

  9. linux内核中断之看门狗

    一:内核中断 linux内核中的看门狗中断跟之前的裸板的中断差不多,在编写驱动之前,需要线把内核自带的watch dog模块裁剪掉,要不然会出现错误:在Device Drivers /Watchdog ...

随机推荐

  1. css 定义hr的几种样式

    <style type="text/css"> <!-- .hr0{ height:1px;border:none;border-top:1px dashed # ...

  2. ThinkPHP 3.1.2 视图-1

    一.模板的使用 (重点) a.规则 模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和模块名同名的文件夹[Index]/和方法名同名的文件 [index].html(.tpl) 更换模板文 ...

  3. 宣布正式发布 Windows Azure 上的 Oracle 软件以及 Windows Azure Traffic Manager 更新

     Windows Azure 的核心原则之一就是为客户提供一个开放.灵活的平台.今天是一个令人振奋的里程碑,因为我们与 Oracle 的合作又向前迈进了一步.Oracle Database.Ora ...

  4. Libev学习笔记1

    和Libevent相似,Libev是一个高性事件驱动框架,据说性能比Libevent要高,bug比Libevent要少.Libev只是一个事件驱动框架,不是网络库,因为它的内部并没有任何socket编 ...

  5. VS2010/MFC对话框:非模态对话框的创建及显示

    非模态对话框的创建及显示 上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切 ...

  6. [置顶] 使用mongofiles操作GridFS

    使用mongofiles操作GridFS GridFS描述: GridFS,看起来像一种文件系统,其实是一种数据库用法.主要用来在数据库中存储二进制大文件.可以统一用数据库处理数据,而无需借助外部的文 ...

  7. Qt编写文件一键命名软件

    之所以会写这篇博文,主要是由于近期从网上下载了一堆图片,但图片名称非常没有规律,处理起来非常不方便,由此想到是不是有一键命名的软件能够帮助我对全部图片命名,是图片名称有规律,这样在处理时方便操作. 有 ...

  8. python开发环境安装

    1.首先安装python-3.4.2.msi,此为python主程序,双击安装,根据自身的情况做选择,也可以使用默认设置,一路next也没什么问题. 2.设置环境变量=>编辑Path,在最后加上 ...

  9. Aspx 页面生命周期

    ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初始化.实例化控件.还原和维护状态.运行事件处理程序代码以及进行 呈现.了解页的生命周期非常重要,这样就 ...

  10. Angular JS 学习笔记(二)

    1. AngularJS 是一个 JavaScript 框架.它可通过 <script> 标签添加到 HTML 页面.AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定 ...