返回

使用inotifywait监视文件系统事件更新MySQL表

Linux

使用 inotifywait 更新 MySQL 表

简介

inotifywait 是一个功能强大的工具,可用来监视文件系统事件。在本文中,我们将探讨如何使用 inotifywait 输出结果来更新 MySQL 表。具体来说,当文件创建事件发生时,我们将使用 inotifywait 输出的相关信息插入到 MySQL 表中。

解决方案

1. 安装 inotify-tools

首先,确保你的系统已安装 inotify-tools。Ubuntu 用户可以使用以下命令:

sudo apt-get install inotify-tools

2. 创建 MySQL 表

其次,创建一个名为 "inotify_test" 的 MySQL 表,包含以下列:

  • server_name(varchar)
  • folder_name(varchar)
  • file_name(varchar)
  • created_at(timestamp)
  • created_date(date)

3. 编写脚本

编写以下脚本来监视目录中的文件创建事件并将其输出插入 MySQL 表:

#!/bin/sh
set -x
hostname=$(hostname)
foldername=test_inotify
while inotifywait -m -r -e create --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %f' /root/test_inotify | awk '{ print $1; print $2; print $3; }'; do
    mysql -e "USE inotify; INSERT INTO inotify_test(server_name, folder_name, file_name, created_at, created_date) values ('$hostname', '$foldername', '$3', '$2', '$1')"
done

4. 运行脚本

最后,运行脚本以开始监视文件创建事件:

./inotifywait_script.sh

提示

  • 确保 MySQL 服务正在运行。
  • 修改 hostnamefoldername 变量以匹配你的环境。
  • 如果 MySQL 需要密码进行连接,请在 mysql 命令中添加 -p 选项和密码。
  • 为了避免重复插入,你可以在 inotifywait 命令中添加 -e close_write 选项,该选项会在文件写入操作完成后触发事件。

示例输出

mysql -e "SELECT * FROM inotify_test"
+------------+------------+----------+---------------------+--------------------+
| server_name | folder_name | file_name | created_at          | created_date      |
+------------+------------+----------+---------------------+--------------------+
| trn1rep2    | test_inotify | file1.txt | 2023-03-08 14:32:10 | 2023-03-08        |
| trn1rep2    | test_inotify | file2.txt | 2023-03-08 14:32:25 | 2023-03-08        |
+------------+------------+----------+---------------------+--------------------+

常见问题解答

1. ** inotifywait 是什么?**

  • inotifywait 是一个工具,用于监视文件系统事件并触发用户定义的命令。

2. ** inotifywait 如何工作?**

  • inotifywait 使用 Linux 内核中的 inotify 接口来监听文件系统事件。当发生事件时,inotifywait 将触发用户定义的命令。

3. 如何在 MySQL 表中插入数据?

  • 使用 INSERT 语句将数据插入 MySQL 表中。INSERT 语句包含表名、列名和要插入的值。

4. 如何从 ** inotifywait 输出中提取信息?**

  • 使用管道(|)将 inotifywait 输出定向到 awk 命令。awk 命令可以解析输出并提取所需的信息。

5. 如何自动化 ** inotifywait 监视?**

  • inotifywait 脚本添加到系统启动脚本中,以便它在系统启动时自动运行。