Я написал такое правило udev:
SUBSYSTEM=="usb", ACTION=="add", RUN+="//root/usbmon/usb add %b"
SUBSYSTEM=="usb", ACTION=="remove", RUN+="//root/usbmon/usb remove %b"
теперь этот сценарий usb отправляет электронное письмо всякий раз, когда usb прикрепляется и удаляется.
но проблема в том, что каждый раз он отправляет 2 письма. это означает, что правило выполняется 2 раза. это то, что я получаю в журнале
Apr 26 14:52:00 box2 sendEmail[3374]: Email was sent successfully!
USB Added: Email sent to box2@dmz.domain.com Using Udev Rule at 04-26-14-52-00.
Apr 26 14:52:00 box2 sendEmail[3394]: Email was sent successfully!
USB Added: Email sent to box2@dmz.domain.com Using Udev Rule at 04-26-14-52-00.
Я не знаю, почему он выполняется 2 раза и как я могу остановить его работу один раз? Я убедился, что проблема находится в конце udev, но не знаю, как ее исправить. это вывод монитора udev при подключении usb:
KERNEL[1335803018.283341] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4 (usb)
KERNEL[1335803018.284456] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0 (usb)
KERNEL[1335803018.284835] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6 (scsi)
KERNEL[1335803018.284863] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/scsi_host/host6 (scsi_host)
KERNEL[1335803023.524167] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0 (scsi)
KERNEL[1335803023.524735] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0 (scsi)
KERNEL[1335803023.525043] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0/scsi_disk/6:0:0:0 (scsi_disk)
KERNEL[1335803023.525154] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0/scsi_device/6:0:0:0 (scsi_device)
KERNEL[1335803023.525505] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0/scsi_generic/sg6 (scsi_generic)
KERNEL[1335803023.525792] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0/bsg/6:0:0:0 (bsg)
KERNEL[1335803023.526534] add /devices/virtual/bdi/8:80 (bdi)
UDEV [1335803023.526895] add /devices/virtual/bdi/8:80 (bdi)
KERNEL[1335803023.543043] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0/block/sdf (block)
KERNEL[1335803023.543166] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0/block/sdf/sdf1 (block)
UDEV [1335803028.541785] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4 (usb)
UDEV [1335803038.850181] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0 (usb)
UDEV [1335803038.850423] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6 (scsi)
UDEV [1335803038.850541] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0 (scsi)
UDEV [1335803038.850568] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/scsi_host/host6 (scsi_host)
UDEV [1335803038.851736] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0 (scsi)
UDEV [1335803038.851912] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0/scsi_disk/6:0:0:0 (scsi_disk)
UDEV [1335803038.861401] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0/scsi_device/6:0:0:0 (scsi_device)
UDEV [1335803038.862757] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0/bsg/6:0:0:0 (bsg)
UDEV [1335803038.863880] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0/scsi_generic/sg6 (scsi_generic)
UDEV [1335803039.002743] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0/block/sdf (block)
UDEV [1335803039.072845] add /devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host6/target6:0:0/6:0:0:0/block/sdf/sdf1 (block)
Приведенный выше вывод ясно показывает, что udev снова подключает устройство через 10 секунд, и это время, когда я снова получаю электронное письмо (через 10 секунд). также, когда скрипт не выполняется, я получаю следующее сообщение 2 раза в файле журнала:
Apr 30 10:22:37 box2 udevd-work[1990]: exec of program '/root/usbmon/usb' failed
Apr 30 10:22:37 box2 udevd-work[1991]: exec of program '/root/usbmon/usb' failed
теперь я хочу знать, что мне нужно изменить эти настройки, чтобы udev запускался один раз. Я подтвердил то же самое на 2 серверах. CentOS и ubuntu.
Проблема была решена добавлением ENV{DEVTYPE}=="usb_device"
в правиле.
Я думаю, ваше правило соответствует /dev/sdf
устройство, но и первый раздел /dev/sdf1
, поэтому он срабатывает дважды.
Если вы хотите только сопоставить /dev/sdf1
, вы можете попробовать что-то вроде KERNEL=="sd*1"
.