Назад | Перейти на главную страницу

Выполнить команду, когда устройство подключено через USB

В настоящее время у меня есть система, которая выполняет резервное копирование моего сервера Linux на USB-накопитель на /media/usb. Все это работает правильно. Однако на самом деле у меня есть 2 диска, которые мы пытаемся менять местами каждый день.

Есть ли способ регистрации, когда USB-устройство было подключено, и способ использования sendmail или что-то подобное, например, отправить электронное письмо администратору, если диск не меняли местами более 3 дней?

Вы можете разобрать / var / log / messages, но я бы не стал.

Я бы написал правило udev, которое запускало скрипт при подключении / отключении устройства. Есть еще информация об этом Вот

Я скопировал основные моменты на случай, если этот сайт выйдет из строя:

Файлы правил хранятся в /etc/udev/rules.d/ каталог.

Из README в этом каталоге есть несколько советов о том, как давать имена файлам правил:

Файлы должны называться xx-descriptive-name.rules, xx следует выбирать первым в соответствии со следующими точками последовательности:

<60 пользовательских правил; если вы хотите предотвратить переопределение присвоения правилами по умолчанию, используйте оператор: =.

они не могут получить доступ к постоянной информации, например, от vol_id

<70 правил, которые запускают помощники, такие как vol_id, для заполнения базы данных udev

<90 правил, которые запускают другие программы (часто с использованием информации из базы данных udev)

= 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

Да, каждый раз, когда вы подключаете или отключаете USB-устройство, сообщение (или сообщения) записывается (пишутся) в / var / log / messages. Вы можете легко проверить это с помощью команды dmesg. Было бы вполне разумно опрашивать этот файл каждые (x) единиц времени, чтобы проверить наличие сообщений о подключении / отключении и действовать соответствующим образом.