#!/bin/bash
now=$(date'+%Y-%m-%d %H:%M:%S')
# the time interval between watchdog.sh monitorings
sleepTime=5
# log of watchdog.sh monitorings
watchdogLog="./watchdoglog.txt"
# current path
curDir=$(pwd)
# echo "current path is: \"$curDir\""
# the path of the monitored process
#baseDir="/home/admin/release/server/" # intranet
baseDir="/usr/local/src/ftp/release/server/" # extranet
if[[ $# -ne 1 && $# -ne 2 ]]; then
echo"$0 parameter number is error!"
exit
fi
# process name of watchdog.sh monitorings
procName=$1
echo"procName is: \"$procName\""
# parameter of process
paramName=$2
echo"paramName is: \"$paramName\""
user=$(whoami)
# echo "user is \"$user\""
if[["$user"!="root"]];then
echo"this tool must run as *root*"
exit
fi
while[[ 0 -lt 1 ]]
do
now=$(date'+%Y-%m-%d %H:%M:%S')
if[["$paramName"==""]];then
ret=$(psaux |grep"$procName$"|grep-v"grep"|grep-v"$0 $procName$"|wc-l)
else
ret=$(psaux |grep"$procName $paramName$"|grep-v"grep"|grep-v"$0 $procName $paramName$"|wc-l)
fi
# echo "$procName $paramName ret = $ret"
if[[ $ret -lt 1 ]];then
echo"$now process $procName $paramName is not exists...">>"$watchdogLog"
# send email to notice administrator
echo"$now process $procName $paramName is not exists..."| mail -s"server status change notice"youremail@qq.com
cd"$baseDir"
# echo "./$procName $paramName"
if[["$paramName"==""]];then
nohup./"$procName">/dev/null2>&1 &
else
nohup./"$procName""$paramName">/dev/null2>&1 &
fi
cd"$curDir"
echo"$now restart process(pid=$!) $procName $paramName done...">>"$watchdogLog"
fi
sleep$sleepTime
done
第二个shell脚本
#! /bin/sh
#进程名字可修改
PRO_NAME=udhcpc
WLAN=ra0
whiletrue;do
# 用ps获取$PRO_NAME进程数量
NUM=`psaux |grep${PRO_NAME} |grep-vgrep|wc-l`
# echo $NUM
# 少于1,重启进程
if["${NUM}"-lt"1"];then
echo"${PRO_NAME} was killed"
${PRO_NAME} -i ${WLAN}
# 大于1,杀掉所有进程,重启
elif["${NUM}"-gt"1"];then
echo"more than 1 ${PRO_NAME},killall ${PRO_NAME}"
killall -9 $PRO_NAME
${PRO_NAME} -i ${WLAN}
fi
# kill僵尸进程
NUM_STAT=`psaux |grep${PRO_NAME} |grepT |grep-vgrep|wc-l`
if["${NUM_STAT}"-gt"0"];then
killall -9 ${PRO_NAME}
${PRO_NAME} -i ${WLAN}
fi
done
exit0