Inotify
inotify 介绍
inotify-tools 是一个用C语言库,一个为Linux提供简单inotify接口的命令行程序。这些程序可以用于监视文件系统事件并执行相应操作,这些程序是用C语言来写的,除了需要Linux内核的inotify支持外,没有其他的依赖,使用方便。
inotify 在Linux内核 2.6.13 (June 18, 2005)版本中引入的一个新功能,它为用户态监视文件系统的变化提供了强大的支持,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。
安装
sudo apt -y install inotify-tools
滚动日志
cat /etc/logrotate.d/watch_daily
/var/log/watch_daily_latest.log {
rotate 1
monthly
compress
missingok
notifempty
}
检测文件改动并创建latest链接
监控脚本放入/etc/init.d/目录,开机启动.
#!/bin/bash -xe
logfile=/var/log/watch_daily_latest.log
exec > $logfile 2>&1
destDir="/nfs/iso/daily"
update_latest() {
notifyFile=$1
notifyDir=$(dirname "$notifyFile")
notifyDirUp=$(dirname "$notifyDir")
if [ "$notifyDirUp" == "$destDir" ]; then
pushd "$notifyDir" > /dev/null
#文件夹是8位数字的参与排序
latestDir=$(find . -mindepth 1 -type d -mtime -7 -regextype "posix-egrep" -regex "^\./[0-9]{8}$" -printf "%T@ %p\n" | sort -nr | head -1 | cut -d ' ' -f 2 | awk -F '/' '{print $2}')
ln -sfn "$latestDir" latest
popd > /dev/null
fi
}
#inotifywait -mrq --timefmt '%y/%m/%d %H:%M' --format '%T %w%f %e' --event delete,modify,create,attrib ${destDir} | while read date time file event
inotifywait -mrq --timefmt '%y/%m/%d %H:%M' --format '%T %w%f %e' --event delete,create ${destDir} | while read -r date time file event; do
case $event in
MODIFY | CREATE | MOVE | MODIFY,ISDIR | CREATE,ISDIR)
filename=$(basename "$file")
regexResult1=$(python3 -c "import re; print(re.match('\.(\w)*', '$filename',re.S))")
regexResult2=$(python3 -c "import re; print(re.match('Cu(\w)*', '$filename',re.S))")
regexResult3=$(python3 -c "import re; print(re.match('[0-9]{8}', '$filename',re.S))")
if [[ 'None' != "${regexResult1}" ]] || [[ 'None' != "${regexResult2}" ]] || [[ 'None' == "${regexResult3}" ]]; then
echo "hidden files or Not date-dir, pass"
else
echo "$event"'-'"$file"'-'"$date"'-'"$time"
if [ 'latest' == "$(basename "$file")" ]; then
echo "latest self, pass"
else
update_latest "$file"
fi
fi
;;
MOVED_FROM | MOVED_FROM,ISDIR | DELETE | DELETE,ISDIR)
echo "$event"'-'"$file"'-'"$date"'-'"$time"
update_latest "$file"
;;
esac
done
文档信息
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
- 发表日期: 2022-11-15T14:29:19+08:00