linux下监听文件变化systemd方法
1. 概述
如果你的Linux支持systemd(现在挺多Linux发行版都支持systemd),那你就可以通过systemd和rsync来实现:监控A目录发生变化,将内容同步到B目录。
可通过以下命令检查自己的Linux是否支持systemd:
ps -p 1
图1-1 支持systemd
systemd的path unit可用来监控目录变化——包括文件的创建、修改、删除等。要使用systemd的path功能,需要编写两个文件:
- .path
用于定义要监控的路径和触发条件
- .service
定义了当监控到符合条件的事件时,要执行的操作。
2. 具体操作
- 创建两个测试目录
实际应用中此步骤可省略——因为你已经有要监控的目录和要备份的目标目录了。
mkdir -p /home/xlin/Templates/tmp/A
mkdir -p /home/xlin/Templates/tmp/B
监控/home/xlin/Templates/tmp/A目录的变化,将A目录的内容同步到B目录。
- 创建sync-files-test.path
在/etc/systemd/system/目录下创建sync-files-test.path的文件,内容如下:
[Unit]
Description=monitor files and sync
[Path]
PathChanged=/home/xlin/Templates/tmp/A
Unit=sync-files-test.service
[Install]
WantedBy=multi-user.target
大意是监控/home/xlin/Templates/tmp/A目录的变化,有变化时执行sync-files-test.service。
- 创建sync-files-test.service
在/etc/systemd/system/目录下创建sync-files-test.service的文件,内容如下:
[Unit]
Description=sync-files-test.service
[Service]
ExecStart=/usr/bin/rsync -av --delete /home/xlin/Templates/tmp/A/ /home/xlin/Templates/tmp/B/
[Install]
WantedBy=multi-user.target
大意是执行rsync命令,将/home/xlin/Templates/tmp/A/的内容同步到/home/xlin/Templates/tmp/B/目录下。
需要注意的是--delete参数,是删除B目录下没有在A目录出现的内容。
- 启动监控服务
可以通过以下命令启动监控服务:
sudo systemctl daemon-reload
sudo systemctl start sync-files-test.path
sudo systemctl enable sync-files-test.path
接下来就可以操作A目录,观察B目录的变化了。