需要监视目录更改并执行操作

时间:2009-02-24 22:06:46

标签: linux file scripting monitoring

首先:我不是程序员,也不是Linux大师,只需要使用Linux,Oracle,shell脚本。

我当前的任务是监视Oracle中的表(工具:sqlplus),如果它包含某一行,则查看一个不断增长的tmp文件的linux目录,并记录其属性(例如ls -l) ,每5秒钟。

最重要的部分是:如果从oracle表中删除了上述记录,则会删除此tmp文件,并且我需要此tmp文件的最后一些内容。

我无法控制Oracle数据,只是获得了查询权限。

可用的工具有:bash,awk,sed,一些旧版本的perl,ruby(不是1.9 *)和python(2.5)。我没有安装权限,因此大多数外部库都无法访问。我知道我可以从我的$ HOME运行一些库,但是我没有在那台机器上连接互联网:所以无法下载任何库。

Inotify不可用(旧内核)。

知道从哪里开始/怎么做?提前谢谢。

2 个答案:

答案 0 :(得分:4)

如何在另一个目录中创建硬链接,然后,当文件在原始位置“消失”时,硬链接仍然可以访问该内容。

答案 1 :(得分:1)

这是丑陋而天真......但是......

#!/bin/bash

WASTHERE=0
MONITORING=/tmp/whatever.dat
LASTBACKUP=/tmp/mybackup.dat
LOGFILE=/tmp/mylog.log

# Just create an empty file to start with
touch "$LASTBACKUP"

while [ 1 ];
do
        if [[ ! -e "$MONITORING" ]]; then
                if [[ $WASTHERE -ne 0 ]]; then
                        echo "File is gone!  Do something with $LASTBACKUP";
                        WASTHERE=0
                fi
        else
                WASTHERE=1
                ls -l "$MONITORING" >> $LOGFILE
                cp "$MONITORING" "$LASTBACKUP"
        fi

        sleep 5
done

关于这一点的不幸部分是,如果在脚本处于休眠状态(例如,内容被写入)时被“监视”的文件发生任何事情,然后在脚本唤醒之前删除该文件,则新写入内容不会出现在'备份'中。