如何实现/srv/web.config与/var/www/web.config自动同步?
嘿,这个需求其实挺常见的,我给你整理了几个实用的实现方案,你可以根据自己的实际场景来选:
方法1:用inotify-tools实现实时监控同步
这是最适合实时自动同步的方案,通过监控源文件的变化事件,触发同步操作。
先安装inotify-tools工具:
- Debian/Ubuntu系统:
sudo apt install inotify-tools - CentOS/RHEL系统:
sudo yum install inotify-tools
- Debian/Ubuntu系统:
编写一个同步脚本(比如命名为
sync_webconfig.sh):
#!/bin/bash SOURCE="/srv/web.config" DEST="/var/www/web.config" # 持续监控源文件的修改、创建、移动、删除事件 inotifywait -m -e modify,create,move,delete "$SOURCE" | while read -r dir events file; do # 用rsync同步,比cp更高效,还能保留权限 rsync -avz "$SOURCE" "$DEST" echo "[$(date '+%Y-%m-%d %H:%M:%S')] 已完成同步:$SOURCE → $DEST" done
给脚本添加执行权限:
chmod +x sync_webconfig.sh让脚本后台运行并开机自启:
推荐做成systemd服务更可靠,创建/etc/systemd/system/webconfig-sync.service文件:
[Unit] Description=Auto sync web.config from /srv to /var/www After=network.target [Service] Type=simple ExecStart=/path/to/sync_webconfig.sh # 替换成你的脚本实际路径 Restart=always User=root [Install] WantedBy=multi-user.target
然后启用服务:sudo systemctl daemon-reload && sudo systemctl enable --now webconfig-sync.service
方法2:用硬链接实现“实时同步”(轻量但有局限)
如果两个文件在同一个文件系统下,硬链接是个极轻量的选择——因为硬链接指向同一个inode,修改其中一个文件,另一个会立刻同步变化。
执行命令创建硬链接:sudo ln /srv/web.config /var/www/web.config
注意:这个方案有个局限——如果源文件被整体替换(比如用cp命令覆盖生成新文件),硬链接会失效,因为新文件是一个全新的inode。所以它只适合“仅修改文件内容、不会整体替换文件”的场景。
方法3:rsync加定时任务(适合非实时需求)
如果对同步延迟不敏感(比如允许几分钟的延迟),用定时任务就足够简单:
- 编辑crontab定时任务:
crontab -e - 添加一行配置(每分钟同步一次):
* * * * * rsync -avz /srv/web.config /var/www/web.config > /dev/null 2>&1
你也可以调整时间规则,比如每5分钟同步一次:*/5 * * * * ...
内容的提问来源于stack exchange,提问作者aayush gupta
相关产品推荐
相关产品推荐

