Inotify脚本建立监视后无法继续执行的问题求助
嘿,我来帮你搞清楚这个问题——你的脚本其实没“卡壳”,只是你可能对inotifywait的运行机制不太熟悉而已!
为什么脚本会停滞?
inotifywait默认是阻塞式单事件监听:它启动后先输出“Setting up watches. Watches established.”,然后就会一直“蹲守”在那儿,直到监测到你指定的文件系统事件(modify/create/delete)才会退出,接着进入循环执行rsync。执行完rsync后,它又会重新启动inotifywait继续蹲守。
所以在你没对/home/My_home/ITB/uploads做任何文件操作的时候,脚本就会停在inotifywait的阻塞状态,看起来像停滞,但这其实是它的正常工作状态。
不过你的脚本还有几个可以优化的点,能让它更符合“实时备份”的预期:
优化后的脚本
我给你调整了脚本,解决了几个潜在问题,还加了日志方便排查:
#!/bin/bash # 定义日志文件路径,你可以改成自己喜欢的位置 LOG_FILE="/var/log/backup_sync.log" # 确保日志目录存在 mkdir -p $(dirname $LOG_FILE) # 记录启动时间 echo "$(date '+%Y-%m-%d %H:%M:%S'): 启动实时备份服务" >> $LOG_FILE while true; do # 使用-m参数让inotifywait持续监听,不用每次循环重启,更高效 # 加上-r参数监听子目录的变化(原脚本没加,会漏掉子目录的操作) inotifywait -m -e modify,create,delete,move -r /home/My_home/ITB/uploads >> $LOG_FILE 2>&1 echo "$(date '+%Y-%m-%d %H:%M:%S'): 检测到文件变化,开始同步..." >> $LOG_FILE # rsync源目录末尾加/,目标目录对应设置,避免在目标里多出一层uploads目录 # 加上--delete让目标和源完全同步(可选,如果你需要删除目标中已在源删除的文件) rsync -avz --delete /home/My_home/ITB/uploads/ /home/My_home/destination/uploads/ >> $LOG_FILE 2>&1 echo "$(date '+%Y-%m-%d %H:%M:%S'): 同步完成" >> $LOG_FILE done
关键改进点:
-m/--monitor:让inotifywait持续监听事件,不用每次循环重新启动,提升效率-r/--recursive:监听目标目录下的所有子目录,避免漏掉子目录的文件变化- 新增
move事件:监听文件移动/重命名的操作,覆盖更全面的场景 - rsync路径末尾加
/:确保源目录的内容直接同步到目标目录,而不是在目标里创建新的uploads子目录 - 日志输出:所有操作都记录到日志文件,方便后续排查问题
--delete参数:可选,如果你需要让目标目录和源目录完全一致(删除源已删除的文件)
测试与后台运行
测试脚本:
运行脚本后,在/home/My_home/ITB/uploads下创建、修改或删除一个文件,比如touch test.txt,然后查看日志文件cat /var/log/backup_sync.log,应该能看到同步触发的记录,说明脚本正常工作。后台运行:
如果想让脚本在退出终端后继续运行,可以用nohup:nohup ./your_backup_script.sh &输出会默认写到
nohup.out,或者你已经在脚本里指定了日志文件,就看你设置的日志路径。开机自启:
如果你想让脚本开机自动运行,可以做成systemd服务:- 创建服务文件:
sudo nano /etc/systemd/system/backup-sync.service - 写入以下内容(替换
your_username和脚本路径):[Unit] Description=实时文件备份同步服务 After=network.target [Service] User=your_username ExecStart=/path/to/your_backup_script.sh Restart=always # 脚本意外退出时自动重启 [Install] WantedBy=multi-user.target - 启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable backup-sync.service sudo systemctl start backup-sync.service
- 创建服务文件:
内容的提问来源于stack exchange,提问作者Mansoor
相关产品推荐
相关产品推荐

