当前位置: 技术问答>linux和unix
unix 系统中,如何不断监控文件是否更新,一旦文件被更新,就把文件复制到另一个地方,如何实现
来源: 互联网 发布时间:2015-11-20
本文导语: unix 系统中,如何不断监控文件是否更新,一旦文件被更新,就把文件复制到另一个地方,如何实现 比如:文件abc.tmp 一旦abc.tmp被某个程序修改,监控程序就把abc.tmp复制到另一个地方,怎么写shell,拜托。。。。。!...
unix 系统中,如何不断监控文件是否更新,一旦文件被更新,就把文件复制到另一个地方,如何实现
比如:文件abc.tmp 一旦abc.tmp被某个程序修改,监控程序就把abc.tmp复制到另一个地方,怎么写shell,拜托。。。。。!!!!!!!!!!!!!!!!!1
比如:文件abc.tmp 一旦abc.tmp被某个程序修改,监控程序就把abc.tmp复制到另一个地方,怎么写shell,拜托。。。。。!!!!!!!!!!!!!!!!!1
|
我有个思路,但是有点笨拙。
1.当前目录生成一个标志文件flag.txt。
2.sleep(1)
3.ls -t flag.txt abc.tmp| sed -n '1p' 的结果如果是abc.tmp,说明在这一秒内文件被修改.Y->4,N->6
4.当前目录生成一个标志文件flag.txt。
5.复制操作
6.转2
因为我的系统没有stat可用,勉强用ls -t代替了。思路就是通过生成一个flag.txt和abc.tmp按时间进行比较。只要确定了abc.bmp被修改后,flag.txt又重新生成,那么它的修改时间就是最新的修改时间。还有一个前提就是,假设修改abc.bmp需要的时间至少在1秒以上。
1.当前目录生成一个标志文件flag.txt。
2.sleep(1)
3.ls -t flag.txt abc.tmp| sed -n '1p' 的结果如果是abc.tmp,说明在这一秒内文件被修改.Y->4,N->6
4.当前目录生成一个标志文件flag.txt。
5.复制操作
6.转2
因为我的系统没有stat可用,勉强用ls -t代替了。思路就是通过生成一个flag.txt和abc.tmp按时间进行比较。只要确定了abc.bmp被修改后,flag.txt又重新生成,那么它的修改时间就是最新的修改时间。还有一个前提就是,假设修改abc.bmp需要的时间至少在1秒以上。
|
可以借鉴一下watch程序,找找源代码。
有一个logrotate可以定期压缩log文件,比如当文件大于100k就压缩。但是不清楚能不能做到文件一改动就提醒。
此外有一个swatch你可以看看。
[转贴]
swatch 是一个实时的日志监控工具。您可以设置您所感兴趣的事件,它可以在事件发生的时候告诉您。Swatch 有两种运行方式:一种可以在检查日志完毕退出,另一种可以连续监视日志中的新信息。
Swatch 提供了许多通知方式,例如:email,振铃,终端输出,多种颜色等等。
您可以从下面的站点下载:
ftp://ftp.stanford.edu/general/security-tools/swatch/
swatch 的安装需要一些 perl 库的支持,安装前确信您的系统已经可以支持 perl。
Swatch 可以在命令行中进行一些简单的设置,例如日志循环时告诉 swatch 在循环完毕后重新启动等等。
配置文件 swatchmessage 是 swatch 软件的重点。这个文本文件告诉 swatch 需要监视什么日志,需要寻找什么触发器,和当触发时所要执行的动作。当 swatch 发现到与 swatchmessage 中定义的触发器正则表达式相符时,它将执行在 swatchrc 中定义的通知程序。Swatch 通过使用/usr/bin/tail -f 实时监视日志文件。
在这里我们不想过多的将如何配置,配置 swatch 非常简单,您可以参考 swatch 自带的配置文件。针对每个服务例如:ftp,sendmail 等等,你必须为每个您所关心的服务配置一个 swatchmessage 文件。
Swatch 启动时可以带很多参数,但使用通常如下格式启动它就可以了:
/usr/local/bin/swatch -c /var/log/syslogmessage -t /var/log/syslog -r 06:00&
-c 参数用于指定配置文件,-t 参数指定实时监视的日志文件,-r 指定重起的时间,"&" 使 swatch 在后台运行。启动后,swatch 产生子进程,因此 swatch 是以两个进程运行的,在停止 swatch 时必须杀掉两个进程。
也可以通过 logrotate 配置在日志循环后重起 swatch,可以在 /etc/logrotate.d 建立一个您所要关心的日志的循环文件,其中最关键的是要加入下面这行:
/usr/local/bin/swatch -c /var/log/syslogmessage -t /var/log/syslog -r + 0
其他的地方可以仿造别的同目录下的文件。
有一个logrotate可以定期压缩log文件,比如当文件大于100k就压缩。但是不清楚能不能做到文件一改动就提醒。
此外有一个swatch你可以看看。
[转贴]
swatch 是一个实时的日志监控工具。您可以设置您所感兴趣的事件,它可以在事件发生的时候告诉您。Swatch 有两种运行方式:一种可以在检查日志完毕退出,另一种可以连续监视日志中的新信息。
Swatch 提供了许多通知方式,例如:email,振铃,终端输出,多种颜色等等。
您可以从下面的站点下载:
ftp://ftp.stanford.edu/general/security-tools/swatch/
swatch 的安装需要一些 perl 库的支持,安装前确信您的系统已经可以支持 perl。
Swatch 可以在命令行中进行一些简单的设置,例如日志循环时告诉 swatch 在循环完毕后重新启动等等。
配置文件 swatchmessage 是 swatch 软件的重点。这个文本文件告诉 swatch 需要监视什么日志,需要寻找什么触发器,和当触发时所要执行的动作。当 swatch 发现到与 swatchmessage 中定义的触发器正则表达式相符时,它将执行在 swatchrc 中定义的通知程序。Swatch 通过使用/usr/bin/tail -f 实时监视日志文件。
在这里我们不想过多的将如何配置,配置 swatch 非常简单,您可以参考 swatch 自带的配置文件。针对每个服务例如:ftp,sendmail 等等,你必须为每个您所关心的服务配置一个 swatchmessage 文件。
Swatch 启动时可以带很多参数,但使用通常如下格式启动它就可以了:
/usr/local/bin/swatch -c /var/log/syslogmessage -t /var/log/syslog -r 06:00&
-c 参数用于指定配置文件,-t 参数指定实时监视的日志文件,-r 指定重起的时间,"&" 使 swatch 在后台运行。启动后,swatch 产生子进程,因此 swatch 是以两个进程运行的,在停止 swatch 时必须杀掉两个进程。
也可以通过 logrotate 配置在日志循环后重起 swatch,可以在 /etc/logrotate.d 建立一个您所要关心的日志的循环文件,其中最关键的是要加入下面这行:
/usr/local/bin/swatch -c /var/log/syslogmessage -t /var/log/syslog -r + 0
其他的地方可以仿造别的同目录下的文件。
|
好像像是rsync的功能,定时rsync就是直接把目录中变化过的文件传过去,没变的文件就跳过。
|
rsync可能不合适:)楼主的要求实际是事件驱动的,用定时机制不一定能够满足需求。
|
ln 建个连接不行吗? 不需要copy.
|
我也想知道,最后给出具体的命令或脚本:)
|
不知道copy结束以后,系统能有什么事件过来
如果能截获这个事件这就好办了。
或者系统提供了一个可以挂钩子的地方,我觉得应该有的啊,要不系统也太不完善了点。
那种循环的做法还是不可取吧。
如果能截获这个事件这就好办了。
或者系统提供了一个可以挂钩子的地方,我觉得应该有的啊,要不系统也太不完善了点。
那种循环的做法还是不可取吧。
|
sun0591 说下解决方法,分享下
|
说把,咋这样D?~ 难得大家这么顶你
|
什么系统?linux有dnotify 。