监视文件更改不适用于带有 systemd 的数据库文件
Posted
技术标签:
【中文标题】监视文件更改不适用于带有 systemd 的数据库文件【英文标题】:Monitor file changing doesn't works for database file with systemd 【发布时间】:2019-01-19 20:42:16 【问题描述】:我想在以下路径下监控文件系统中的一个数据库文件:
/var/lib/mysql/mydatabase/onetable.idb
我设置了一个 systemd 服务,但它无法识别文件是否更改。如果我修改这个文件,什么都没有发生,但是如果修改了权限,它就可以工作。我也尝试使用 inotifywait 监控此文件,但得到了相同的结果。
我知道 systemd 以 root 身份运行,所以我认为没有任何权限问题。路径100%肯定有效,因为我可以直接列出文件。
【问题讨论】:
【参考方案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).
这些例程在数据库实现中经常使用。
【讨论】:
如果inotify不支持,我应该使用哪个软件?【参考方案2】:通过在 crontab 中插入这段代码临时解决了这个问题:
*/3 * * * * test "`sudo find /var/lib/mysql/mydatabase/onetable.idb -mmin -4`" && /etc/myscript.sh
这不是永久的解决方案,因为我想做这个基于触发器的脚本运行。
【讨论】:
以上是关于监视文件更改不适用于带有 systemd 的数据库文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 perl (macos 和 linux) 监视文件的更改
带有 UIControlEvents.valueChanged 的日期选择器不适用于第一个值更改事件
href 链接不适用于带有“onmouseover 更改文本”和 onmouseout 的 innerHTML 脚本