监视文件更改不适用于带有 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 脚本

systemctl service systemd-notify 不适用于非 root 用户

重大位置更改不适用于仅 Wifi 的设备

拉伸和字距调整类型,不适用于带有 @IBDesignable 的 Storyboard