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

我目前有一个系统,将我的Linux服务器备份/media/usb上的USB存储设备上。 这一切正常工作。 但是,我实际上有两个驱动器,我们试图每天交换。

有没有logging当USB设备插入时的日志logging和使用sendmail或类似的方式发送电子邮件给pipe理员如果驱动器尚未交换3天以上的方式?

你可以parsing/ var / log / messages,但我不会。

我会写一个udev规则,当你连接/断开设备时运行脚本。 这里有更多的信息

我已经复制了突出点,以防网站宕机:

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

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

文件应该命名为xx-descriptive-name.rules,首先应根据以下顺序点selectxx:

最多60个用户规则 如果要防止默认规则覆盖分配,请使用:=运算符。

这些不能从vol_id中访问持久性信息

运行帮助程序(如vol_id)的规则填充udev db

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

= 90个最后应该运行的规则

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

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

现在,我们有必要的钥匙来识别我们正在寻找的特定硬件,我们可以添加赋值参数。 在我们的例子中,我们加了两个 第一个在/ dev /目录下创build一个到这个设备的符号链接。 第二个在我们的主目录下执行一个脚本:

 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 

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