当设备通过 USB 连接时执行命令

当设备通过 USB 连接时执行命令

我目前有一个系统,可以将我的 Linux 服务器备份到 上的 USB 存储设备上/media/usb。这一切都运行正常。但是,我实际上有 2 个驱动器,我们每天都会尝试交换它们。

有没有办法记录 USB 设备插入的时间,以及sendmail如果驱动器 3 天以上没有更换,使用什么类似方法向管理员发送电子邮件?

答案1

您可以解析 /var/log/messages,但我不会这么做。

我会编写一条 udev 规则,在连接/断开设备时运行脚本。有关它的更多信息这里

我已复制了要点,以防该网站出现故障:

规则文件存储在该/etc/udev/rules.d/目录中。

该目录中的 README 中有一些关于如何命名规则文件的建议:

文件应命名为xx-descriptive-name.rules,应按照以下顺序点首先选择xx:

< 60 大多数用户规则;如果您想防止分配被默认规则覆盖,请使用 := 运算符。

这些无法访问持久信息,例如来自 vol_id 的信息

< 70 条规则运行诸如 vol_id 之类的辅助程序来填充 udev db

<90 条运行其他程序的规则(通常使用 udev db 中的信息)

=90 条应最后运行的规则

udev 规则的第一部分是匹配键。我们将使用链最顶端的 KERNEL 条目以及设备特定信息中的 idVendor、idProduct 和 serial 属性。这将明确识别此特定拇指驱动器并忽略所有其他驱动器。内核参数使用问号作为通配符,这样即使我们的驱动器安装在不同的节点上(即:sda1、sdb1、sdc1 等),它仍然可以被识别。

KERNEL=="sd?1", ATTRS{idVendor}=="13fe", ATTRS{idProduct}=="1f00",
ATTRS{serial}=="50E6920B000AE8" 

现在,我们已经拥有了识别所需特定硬件所需的密钥,我们可以添加赋值参数了。在我们的例子中,我们添加了两个。第一个在 /dev/ 目录中创建指向此设备的符号链接。第二个在我们的主目录中执行一个脚本:

SYMLINK+="hackaday", RUN+="/home/mike/notify-plugin.sh 'HackaDay Thumbdrive:' 'Connected as: $KERNEL'" 

以下是最终规则的整行内容:

KERNEL=="sd?1", ATTRS{idVendor}=="13fe", ATTRS{idProduct}=="1f00", ATTRS{serial}=="50E6920B000AE8", SYMLINK+="hackaday", RUN+="/home/mike/notify-plugin.sh 'HackaDay Thumbdrive:' 'Connected as: $KERNEL'" 

我们将其作为规则文件中的唯一行添加,然后使用以下命令重新启动 udev:

sudo nano /etc/udev/rules.d/81-thumbdrive.rules 
sudo /etc/init.d/udev restart

答案2

是的,每次您插入或断开 USB 设备时,/var/log/messages 中都会写入一条(或多条)消息。您可以使用命令 dmesg 轻松查看这些消息。每隔 (x) 个时间单位轮询该文件以检查连接/断开连接消息并采取相应措施并非完全不合理。

相关内容