Linux跨服务器监控文件,[转]Linux下用inotify-tool实时监控服务器文件系统
使用
inotify相关参数:
/proc/sys/fs/inotify/max_queued_events #请求events数的最大值
/proc/sys/fs/inotify/max_user_instances #每个user可创建的instances数量上限
/proc/sys/fs/inotify/max_user_watches #可监控的目录最大数
inotifywait是一个监控等待事件,可配合shell实时监控记录文件系统,常用参数:
--timefmt 时间格式
%y年 %m月 %d日 %H小时 %M分钟
--format 输出格式
%T时间 %w路径 %f文件名 %e状态
-m 始终保持监听状态,默认触发事件即退出。
-r 递归查询目录
-q 打印出监控事件
-e 定义监控的事件,可用参数:
open 打开文件
access 访问文件
modify 修改文件
delete 删除文件
create 新建文件
attrb 属性变更
样例
#!/bin/bash WAIT_DIR=${1-/tmp} /usr/local/inotify/bin/inotifywait -qmre attrib,modify,move,create,delete $WAIT_DIR --format '"%w" "%f" "%e" "%T"' --timefmt='%F_%T' \ | while read DIR FILE EVENT TIME ;do echo $DIR $FILE $EVENT $TIME done
问题
监控单个文件时候,如果文件mv了无法监控,因为inotify是基于inode来监控,linux
mv文件不改变真正的inode。
怎样解决,目前我想到的两个办法
Inotifywait 不能监控单个文件mv操作可以有两个办法
1 监控目录 --exclude 正则取非
2 脚本判断
#!/bin/bash WAIT_DIR=${1-/tmp} /usr/inotify/bin/inotifywait -qmre attrib,modify,move,create,delete $WAIT_DIR --exclude '/?!1/' --format '"%w" "%f" "%e" "%T"' --timefmt='%F_%T' | while read DIR FILE EVENT TIME ;do If [ $FILE == 1 ] ; then
echo $DIR $FILE $EVENT $TIME
fi done
扩展 阅读
notify的配置选项
使用Inotify时,要特别注意内核中关于它的两个配置。首先/proc/sys/fs/inotify/max_user_instances
规定了每个用户所能创建的Inotify实例的上限;其次/proc/sys/fs/inotify/max_user_watches规定了每个Inotify实例最多能关联几个监控(watch)。你可以很容易地试验在运行过程中达到上限,如:
% inotifywait -r /
Setting up watches. Beware: since -r was given, this may take a while!
Failed to watch /; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches'.
如果要改变这些配置,只要向相应的文件写入新值即可,如下所示:
# cat /proc/sys/fs/inotify/max_user_watches
8192
# echo 16000 > /proc/sys/fs/inotify/max_user_watches
# cat /proc/sys/fs/inotify/max_user_watches
16000
使用Inotify的一些工具
近一段时间出现了很多基于Inotify的超炫的工具,如incron,它是一个类似于cron的守护进程(daemon),传统的cron守护进程都是在规定的某个时间段内执行,而incron由于使用了Inotify,可以由事件触发执行。同时incron的安装简单而直观,比如在debian上,首先在/etc/incron.allow中添加使用incron的用户(debian默认不允许用户使用incron,因为如果incron使用不慎的话,例如形成死循环,则会导致系统宕机):
# echo username > /etc/incron.allow
然后调用”incrontab -e“,
在弹出的编辑器中插入我们自己的规则,例如下面的这条简单的规则,文件一变化incron就会发邮件通知我们:
/srv/test/ IN_CLOSE_WRITE mail -s "$@/$#\n" root
从现在开始,一旦/src/test文件夹中的文件被修改,就会发送一封邮件。但是注意不要让incron监控整个子目录树,因为Inotify只关注inodes,而不在乎是文件还是文件夹,所以基于Inotify的软件都需要自己来处理/预防递归问题。关于incontab详细使用,请参考incrontab的manpage。
如果你还要处理incoming文件夹,那么你可能需要inoticoming。当有文件进入incoming文件夹时Inoticoming就会执行某些动作,从而可以用inoticoming来管理debian的软件仓库(例如软件仓库中一旦有上传源码包或是新添加的二进制包就立刻自动进行编译),另外,还可以用它来监控系统是否有新上传文件,如果有就发送通知。类似的工具还有(它们都各有专长):inosync(基于消息通知机制的文件夹同步服务),iwatch(基于Inotify的程序,对文件系统进行实时监控),以及lsyncd(一个守护进程(daemon),使用rsync同步本地文件夹)。
Inotify甚至对传统的Unix工具也进行了改进,例如tail。使用inotail,同时加上-f选项,就可以取代每秒轮询文件的做法。此外,GNU
的coreutils从版本7.5开始也支持Inotify了,我们可以运行下面的命令来确认:
# strace -e inotify_init,inotify_add_watch tail -f ~log/syslog
[...]
inotify_init() = 4
inotify_add_watch(4, "/var/log/syslog", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1
从现在开始,通过轮询来确实文件是否需要重新读取的方法应该作为古董了。
在脚本中使用Inotify
Inotify机制并不局限于工具,在脚本语言中也完全可以享受Inotify的乐趣,如Python中可以使用pyinotify和inotifyx,Perl中有Filesys-Notify-Simple和Linux-Inotify2,Inotify的Ruby版有ruby-inotifyrb-inoty和fssm。
总结
综上所述,Inotify为Linux提供了一套高效监控和跟踪文件变化的机制,它可以实时地处理、调试以及监控文件变化,而轮询是一种延迟机制。对于系统管理员,关于实现事件驱动的服务如系统备份,构建服务以及基于文件操作的程序调试等,Inotify无疑提供了强大的支持。
Linux跨服务器监控文件,[转]Linux下用inotify-tool实时监控服务器文件系统相关推荐
- linux跨服务器复制文件夹,linux下跨服务器文件文件夹的复制
了解一下C++输入和输出的概念 我们经常用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上.从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件.除了以终 ...
- linux间服务器间文件传输,Linux命令scp服务器间文件传输教程
scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ssh,并且和ssh 使用相同的认证方式,提供相同的安全保证 .那么你知道Linux命令scp服务器间文件传输教程么?接下来是 ...
- Linux SCP跨服务器传输文件
SCP跨服务器传输文件 注: 1.跨服务器传输文件或文件夹需确保两台服务器之间的22端口是互通的 2.sh脚本自动删除本机原有文件或文件夹然后在从其他服务器上拷贝文件或文件夹到本机 一.sh脚本定时自 ...
- 查看服务器大文件,linux 查看服务器大文件
linux 查看服务器大文件 内容精选 换一换 当创建文件系统后,您需要使用云服务器来挂载该文件系统,以实现多个云服务器共享使用文件系统的目的.本章节以Windows 2012版本操作系统为例进行NF ...
- linux用vi写文件内容,Linux下利用vi编辑器创建文件并写入内容 专家详解
Linux系统作为一款以命令行操作为主的系统,vi编辑器无疑大大扩展了命令行的功能,使用户在命令行下可以进行文件的各种操作,学会vi编辑器的使用无疑是非常必要的.而且vi的使用和vim的使用非常相似, ...
- linux中用vi读文件夹,linux下vi与vim编辑器的简单区别及VI详细使用方法
vi与vim一样都是编辑器,不同的是vim更高级一些,可以理解是vi的高级 版本.vi就像Windows中的计事本,而vim则可以算的上是 office中的word.vi主要用来编辑一些文件,vim是 ...
- linux中vi修改文件内容,linux VI模式下批量修改文件内容
1. :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky 2. :n,$ ...
- linux自动下载ftp文件夹,Linux 下FTP定时执行批量下载文件
使用FTP定时批量下载指定文件的shell脚本 环境:centos6.9 1.目标FTP服务器地址 #FTP服务器地址 ip=10.19.15.23 2.FTP账号和密码 u=账号 p=密码 3.使用 ...
- 服务器压缩文件命令,linux服务器解压缩文件的命令
尝试去好好用linux.新手起步. 这边只会提到我用过的.其他相关的以后我用到了我会补充的.如果有错欢迎指正 注:1.c-创建-create 2.v-复杂输出 3.f-文件-file 4.x-解压 ...
最新文章
- 来自一年的程序员的困惑
- 设计模式之 抽象工厂 封装业务逻辑层和Dao层
- 神策数据全面支持出海客户合规 GDPR!
- 沃尔玛招聘.NET软件工程师
- spring ioc原理
- WF4 常用类第二篇
- linux php mysql 中文_Linux下PHP+MySQL+CoreSeek中文检索引擎配置 | 系统运维
- sessionFactory.getCurrentSession()的引出
- 【Java基础教程】Java的输入输出
- win11的控制面板在哪?
- UE4开发五:人物模型和摄像机
- 微信支付退款 升级版 【码云gvp 】
- 组合数学 多重集的排列和组合
- SCTF 2019 re部分题解(持续更新中)
- P3084 照片 [差分约束]
- linux命令行选项英文全称,【转载】Linux命令英文全称(方便理解)
- polystyrene beads Profiling的一些设置
- 蓝图编程中的10个技巧
- 机器学习 数据预处理之数据打标签
- 企业百度百科词条怎么做才能通过,创建公司百度百科词条难么
热门文章
- 3 + 2 ÷ 0 = ?
- Hyper-V中直通式SCSI磁盘的局限性
- LLM总结(持续更新中)
- 2017年-2018年索尼/LG系列电视购买建议
- 1. 分类与回归树原理(CART)
- 关闭彻底Windows10自动更新工具-Windows Update Blocker
- MySQL报错1055解决办法
- 华为手表哪款搭载鸿蒙系统,华为Watch GT 2渲染图曝光:首款搭载鸿蒙系统的智能手表...
- Linux网络编程(六)-高并发服务器03-I/O多路复用03:epoll【红黑树;根节点为监听节点】【无宏FD_SETSIZE限制;不需每次都将要监听的文件描述符从应用层拷贝到内核;不需遍历树】
- php图片马制作教程视频教程,【视频】很帅气好看的马头水彩手绘视频教程 马怎么画 马的画法视频...