inotifywait监控多个目录
一.需求:
1.监控特定的服务配置文件和目录变更情况。
2.监控自定义文件和目录变更情况。
3.可以手动杀掉进程。
4.把所有变更信息弄到日志里。
二.Inotify介绍
Inotify 是一个内核用于通知用户空间程序文件系统变化的机制,是基于inode级别的文件系统监控技术,是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能,内核要求2.6.13以上。
2.1 Inotify监控事项
Events 含义
access 文件或目录被读取
modify 文件或目录内容被修改
attrib 文件或目录属性被改变
close 文件或目录封闭,无论读/写模式
open 文件或目录被打开
moved_to 文件或目录被移动至另外一个目录
moved_from 文件或目录被移动到另一个目录或从另一个目录移动至当前目录
create 文件或目录被创建在当前目录
delete 文件或目录被删除
unmount 文件系统被卸载
2.2 Inotify参数说明
参数 说明
-m 持续监听
-r 使用递归形式监视目录
-q 减少冗余信息,只打印出需要的信息
-e 指定要监视的事件,多个时间使用逗号隔开
--timefmt 时间格式
--format 监听到的文件变化的信息
ymd分别表示年月日,H表示小时,M表示分钟
--format 说明:
参数 说明
%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定义的时间格式
三.脚本如下:
#!/bin/bash
#监控文件和文件夹变更
A=y
B=`grep INOTIFY_USER /boot/config-$(uname -r)`
C=`echo ${B:0-1}`
system=`getconf LONG_BIT`
#定义安装inotify
function Install_inotify()
{
if [ "$A" = "$C" ]
then
echo -e "\033[31mstart install INOTIFY-3.14...... \033[0m"
cd /opt
tar zxvf inotify-tools-3.14.tar.gz &> /dev/null
cd /opt/inotify-tools-3.14
./configure && make && make install &> /dev/null
echo -e "\033[31mINOTIFY-3.14 install successful! \033[0m"
if [ "$system" = 64 ]
then
echo -e "\033[31minstall 64-bit system patch......\033[0m"
ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0
else
echo -e "\033[31minstall 32-bit system patch......\033[0m"
ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.0
fi
exit
else
echo -e "\033[31mSystem not supported INOTIFY...... \033[0m"
exit
fi
}
#定义tomcat监控目录
function Inotify_tomcat ()
{
#查找tomcat配置文件
echo -e "\033[31m正在搜索tomcat配置文件目录,正在打印.....\033[0m"
echo "`find / -name "server.xml"`"
read -p "Please insert tomcat configuration file": File
echo -e "\033[31mtomcat configuration file is $File \033[0m"
read -p "Please insert tomcat Application web directory": Directory
echo -e "\033[31mtomcat Application web directory is $Directory \033[0m"
touch /opt/Inotify_tomcat.log
echo -n "" > /opt/Inotify_tomcat.log
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify,delete,create,attrib,,moved_from,moved_to,unmount $File $Directory >> /opt/Inotify_tomcat.log &
echo -e "\033[31mlook /opt/Inotify_tomcat.log information \033[0m"
exit
}
#自定义目录和文件监控
function Inotify_custom ()
{
echo -e "\033[31m编辑自定义文件和目录监控配置文件/opt/mon.txt: \033[0m"
touch /opt/Inotify_custom.log
echo -n "" > /opt/Inotify_custom.log
for line in $(cat /opt/mon.txt)
do
echo $line
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify,delete,create,attrib,,moved_from,moved_to,unmount $line >> /opt/Inotify_custom.log &
done
exit
}
#定义关闭监控进程
function Inotify_kill ()
{
echo -e "\033[31mMonitoring is turned off \033[0m"
pid=`ps -ef | grep inotifywait | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
echo -e "\033[31mkill inotifywait pid : \033[0m"$pid
kill -9 $pid
echo -e "\033[31minotifywait turned off successful \033[0m"
exit
else
echo -e "\033[31mMonitoring does not exist \033[0m"
exit
fi
}
#PS3一般为菜单提示信息#
PS3="Please Select Menu":
#select为菜单选择命令,格式为select $var in ..command.. do .... done
select i in "Install_inotify" "Inotify_tomcat" "Inotify_custom" "Inotify_kill"
do
#case 方式,一般用于多种条件下的判断
case $i in
Install_inotify )
Install_inotify
;;
Inotify_tomcat )
Inotify_tomcat
;;
Inotify_custom )
Inotify_custom
;;
Inotify_kill )
Inotify_kill
;;
*)
echo
echo "Please Insert $0: Install_inotify(1)|Inotify_tomcat(2) |Inotify_custom(3) |Inotify_kill(4)"
break
;;
esac
done
四.使用说明:
一、功能介绍
1.文件变更删除,创建,移动,修改,卸载,权限改动实时监控
2.文件夹变更删除,创建,移动,修改,卸载,权限改动实时监控
二、使用选项说明
1.安装服务
2.tomcat监控 #配置文件和web应用目录需要提供
如:
找到tomcat配置文件并输入进去
Please insert tomcat configurationfile:
/opt/apache-tomcat-7.0.67/conf/server.xml
找到tomcat-web应用目录并输入进去
Please insert tomcat Application web directory:
/opt/apache-tomcat-7.0.67/webapps/vaiops
相应的监控日志在: /opt/Inotify_tomcat.log
3.自定义监控 #需要手动编辑/opt/mon.txt文件,把需要监控的目录和文件填入。
如:
vim /opt/mon.txt
/opt/mon.txt
/etc
/opt
4.杀死监控进程
如:
Monitoring is turned off
kill inotifywait pid : 4538 4539 4540
inotifywait turned off successful
三、脚本运行参数说明
例子:
运行sh intify.sh
1) Install_inotify
2) Inotify_tomcat
3) Inotify_custom
4) Inotify_kill
###为了带孩子,最近都没时间发文章了,感觉天天觉都不够睡,今天有点空闲发一篇脚本记录下。