Chinaunix首页 | 论坛 | 博客
  • 博客访问: 668423
  • 博文数量: 160
  • 博客积分: 2384
  • 博客等级: 大尉
  • 技术积分: 1366
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-01 11:35
文章分类
文章存档

2015年(45)

2014年(36)

2012年(28)

2011年(37)

2010年(2)

2009年(10)

2008年(2)

分类:

2012-02-20 12:27:11

使用shell进行定时监控

 

题目:使用shell脚本对文件进行定时监控,可以自己设置监控时间和监控的文件。

解答:通过定时sleep,然后在时间到的时候查看文件的修改时间是否与上次的修改时间一致,如果相同,表示文件没有被修改,如果不同表示文件已经被修改并进行备份对比,查看是哪些地方进行了修改。

 

#! /bin/bash -

 

declare -f getparam

declare -f getstatus

declare -f modification

declare -f loop

declare -i timeval=5

filename=""

lasttime=""

visittime=""

 

function getparam()

{

         if [ $# -le 1 ]; then

                   printf "usage:$0 [-f filename] [-t timeval]\n"

                   exit 1

         fi

        

         while getopts "f:t:" opt

         do

                   case $opt in

                            f)       filename=$OPTARG;;

                            t)      timeval=$OPTARG;;

                            ?)

                                     printf "usage:$0 [-f filename] [-t timeval]\n"

                                     exit 1;;

#                          *)

#                                   printf "usage:$0 [-f filename] [-t timeval]\n"

#                                   exit 1

                   esac

         done

         #注意双括号的用法 执行双括号里面的内容

         #shift 去掉-f -t选项 只留下最后的参数

         shift $(($OPTIND-1))

}

 

function getstatus()

{

         if [ "$filename" = "" ] || [ ! -e $filename ]; then

                   printf "invalid file: $filename\n"

                   exit 2

         fi

         printf "Start monitor $filename changement\n"

         lasttime=`stat $filename | grep 'Modify' | cut -d " " -f3 | cut -d "." -f1`

         #全部拷贝 包括修改时间等等 -a

         cp -a $filename $filename.bak

}

 

function modification()

{

         username=`stat $filename | grep Uid | cut -d "/" -f3 | cut -d ")" -f1 | cut -d " " -f5`

         ip=`last | grep $username | sed -n '$p' | awk '{print $3}'`

         printf "Modify by $username $ip in $visittime\n"

         diff -Naur $filename.bak $filename > ${visittime}_${username}_${ip}.patch

         cp -a $filename $filename.bak

         lasttime=$visittime

}

 

function loop()

{

         while [ 1 ]

         do

                   visittime=`stat $filename | grep 'Modify' | cut -d " " -f3 | cut -d "." -f1`

                   if [ $lasttime != $visittime ]; then

                            modification

                   fi

                  

                   sleep $timeval

         done

}

 

#set -x

getparam "$@"

getstatus

loop

exit 0

阅读(425) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~