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