首先:我不是程序员,也不是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不可用(旧内核)。
知道从哪里开始/怎么做?提前谢谢。
答案 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
关于这一点的不幸部分是,如果在脚本处于休眠状态(例如,内容被写入)时被“监视”的文件发生任何事情,然后在脚本唤醒之前删除该文件,则新写入内容不会出现在'备份'中。