背景
可以使用inotifywait命令来监控文件系统事件,包括文件新增和减少,以及文件名和文件路径的变化。:
要监控文件新增事件:
代码语言:javascript复制inotifywait -m /path/to/directory -e create
要监控文件减少事件:
代码语言:javascript复制inotifywait -m /path/to/directory -e delete
要监控文件名或文件路径的变化:
代码语言:javascript复制inotifywait -m /path/to/directory -e attrib
比如只监控文件的创建,删除,移动(文件名和路径)等,然后使用rsync命令来实现文件的实时同步
代码语言:javascript复制#!/bin/bash
# 监控的目录
WATCH_DIR="/path/to/directory"
# 监控目录变化,并执行指定命令
inotifywait -m -r -e create,delete,moved_to,moved_from --format '%w%f' "$WATCH_DIR" |
while read FILE
do
# 执行使用rsync命令将文件同步到远程服务器
rsync -avz --progress "$FILE" user@remote_server:/path/to/destination
done
案例
使用 inotifywait
命令结合一些脚本和命令来监控 Nginx 配置文件,并在配置文件有更改时进行备份。
#!/bin/bash
# 监控的文件路径
WATCH_FILE="/etc/nginx/nginx.conf"
# 备份文件的目录
BACKUP_DIR="/etc/nginx/backup"
# 当前时间戳
TIMESTAMP=$(date %Y%m%d%H%M%S)
# 监控文件变化并执行相应操作
while true; do
# 使用 inotifywait 监控文件变化事件
inotifywait -e modify,move,create,delete "$WATCH_FILE" 2>/dev/null
# 备份原文件到指定目录
cp -p "$WATCH_FILE" "$BACKUP_DIR/nginx.conf.$TIMESTAMP"
done
进阶版
监控多个配置文件
代码语言:javascript复制#!/bin/bash
# 监控的文件路径
WATCH_FILES="/etc/nginx/nginx.conf /etc/mysql/my.ini /www/website/project/.env"
# 备份文件的目录
BACKUP_DIR="/home/xj/Desktop/tmp/0110"
# 监控文件变化并执行相应操作
function monitor_and_backup {
local file="$1"
while true; do
# 当前时间戳
TIMESTAMP=$(date %Y%m%d%H%M%S)
# 使用 inotifywait 监控文件变化事件
inotifywait -e modify,move,create,delete "$file" 2>/dev/null
# 备份原文件到指定目录
FILENAME=$(basename "$file")
mkdir -p "$BACKUP_DIR/$FILENAME/$TIMESTAMP"
cp -p "$file" "$BACKUP_DIR/$FILENAME/$TIMESTAMP/"
done
}
for FILE in $WATCH_FILES; do
monitor_and_backup "$FILE" &
done
wait