用inotify-tools监控配置文件变化并作备份

2024-01-17 13:25:57 浏览数 (2)

背景

可以使用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 配置文件,并在配置文件有更改时进行备份。

代码语言:javascript复制
#!/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

0 人点赞