原文链接:一个守护vsftp进程的脚本
发布时间:2015-08-25 21:56:38
最近一个朋友遇到了如下需求任务,是要求用shell实现一个常驻程序,让我帮助他完成。需求如下:
1、该程序每5秒钟检查vsftp进程运行状态
2、如果vsftp进程正在运行,检查当前目录下的vsftpd.pid文件是否存在:如果不存在则自动创建文件,并在文件中 写入进程号;如果pid文件存在,则检查当前进程号与pid文件中的进程号是否一致,如果不一致,则自动更新pid 文件为当前进程号;
3、如果vsftp进程不存在,则:如果shell首次启动运行,则主动拉起vsftp进程,并把进程号写入到vsftpd.pid文件 中;
4、如果上一次检查时程序正在运行,这次检查程序已经不存在,说明程序在这段时间异常退出,则主动拉起vsftp进 程,更新vsftpd.pid文件,同时写出告警文件,告警文件的格式是 Warn_YYYY_MM_DD_SN.txt(YYYY 年 MM 月 份 DD 日期 SN 自增序列号)
代码如下:DaemonVsftp.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #!/bin/bash
IsFirstStart=0 ProcessName=vsftpd FileName=vstfpd.pid SNFileName=SNFile.txt
FuncExistProcess(){ PID=$(pidof ${ProcessName}) if [ -e $FileName ];then OldPID=$(cat $FileName) if [ ! $PID -eq $OldPID ];then echo $PID > $FileName fi else touch $FileName echo $PID > $FileName fi }
FuncNoProcess(){ if [ $IsFirstStart -eq 0 ];then echo "start vsftp!" service vsftpd start IsFirstStart=1 else echo "start vsftp!" service vsftpd start SN=$(cat $SNFileName) NewSN=$[$SN+1] echo $NewSN > $SNFileName WarnFileName="Warn_"$(date +%Y_%m_%d)"_"${SN}".txt" touch $WarnFileName fi }
if [ ! -e $SNFileName ];then touch $SNFileName echo 1 > $SNFileName fi
while true do if [ $(pgrep $ProcessName|wc -l) -gt 0 ];then FuncExistProcess else FuncNoProcess fi sleep 5 done
|
由于笔者的水平有限,出错在所难免,恳请读者拍砖指正,谢谢阅读。