【问题标题】:Monitor file changing doesn't works for database file with systemd监视文件更改不适用于带有 systemd 的数据库文件
【发布时间】:2019-01-19 20:42:16
【问题描述】:
我想在以下路径下监控文件系统中的一个数据库文件:
/var/lib/mysql/mydatabase/onetable.idb
我设置了一个 systemd 服务,但它无法识别文件是否更改。如果我修改这个文件,什么都没有发生,但是如果修改了权限,它就可以工作。我也尝试使用 inotifywait 监控此文件,但得到了相同的结果。
我知道 systemd 以 root 身份运行,所以我认为没有任何权限问题。路径100%肯定有效,因为我可以直接列出文件。
【问题讨论】:
标签:
database
mariadb
systemd
inotify
【解决方案1】:
来自 inotify.7 手册页:
The inotify API does not report file accesses and modifications that
may occur because of mmap(2), msync(2), and munmap(2).
这些例程在数据库实现中经常使用。
【解决方案2】:
通过在 crontab 中插入这段代码临时解决了这个问题:
*/3 * * * * test "`sudo find /var/lib/mysql/mydatabase/onetable.idb -mmin -4`" && /etc/myscript.sh
这不是永久的解决方案,因为我想做这个基于触发器的脚本运行。