Запустите правило udev для флэш-накопителя USB, когда компьютер запущен с вставленным устройством

Я хочу, чтобы моя серверная система Ubuntu 15.04 x64 выполняла сценарий всякий раз, когда вставлен определенный флеш-накопитель. Поэтому я создал файл настраиваемого правила со следующим содержимым

ACTION=="add",SUBSYSTEM=="usb",ATTR{idVendor}=="my-vendor",ATTR{idProduct}=="my-id",RUN+="/var/scripts/my-script.sh" 

Сценарий запускается всякий раз, когда флешка вставлена, но у меня есть две проблемы:

1) Скрипт, по-видимому, не выполняется, когда компьютер (повторно) запускается с уже вставленным диском. Есть ли способ выполнить сценарий после запуска, если флешка уже подключена?

2) Сценарий хочет установить устройство, но если я попытаюсь подключить устройство, как

 mount LABEL=mylabel /some/path 

или

 mount UUID=my-uuid /some/path 

Источник не найден. В настоящее время я вставил

 sleep 5s 

в мой скрипт, но это не похоже на надежное решение. Существует ли какой-либо (отказоустойчивый) способ ожидания инициализации системы?

Для целей тестирования сценарий содержал только

 #!/bin/sh date >> /tmp/test.log 

One Solution collect form web for “Запустите правило udev для флэш-накопителя USB, когда компьютер запущен с вставленным устройством”

Правила add действий выполняются во время запуска системы, если устройство присутствует. Это делается путем запуска udevadm info --action=add в системе SysVinit и внутри системы Upstart или Systemd. Однако это происходит очень рано в процессе загрузки, в то время, когда корневая файловая система все еще смонтирована только для чтения, а файловые системы из /etc/fstab еще не установлены. Я не уверен, что /run уже доступен в этот момент. Это может быть слишком рано для того, что должен делать ваш скрипт.

Быстрый и грязный, но переносимый способ запуска скрипта во время запуска должен был запускать его из /etc/rc.local , условно на присутствующем устройстве.

 if [ -e /dev/disk/by-id/… ]; then /var/scripts/my-script.sh fi 

Остерегайтесь возможного состояния гонки, если устройство вставлено во время запуска: скрипт будет выполнен сразу же после обнаружения устройства, а затем снова из /etc/rc.local .

Более чистым решением было бы определить блок systemd и объявить зависимости, которые вам нужны в вашем скрипте. Вам все равно нужно остерегаться потенциального состояния гонки.

  • rs232 для usb не работает
  • Что может вызвать «кроссовер» между двумя веб-камерами USB2 при использовании движения?
  • Оперативная загрузка Debian завершается с ошибкой в ​​оболочке initramfs, говоря «невозможно перечислить USB-устройство»
  • Не удается загрузить новую Linux с USB-устройства
  • Беспроводное устройство не отображается
  • Настройка портативной среды разработки
  • Как удержать USB-устройство (камеру действий) от переспать?
  • Удаление процесса с USB-последовательного порта
  • Нет возможности установки Subgraph OS с USB Stick
  • Как вы используете minicom с stdin и stdout?
  • Как подключить файловую систему с заданной шины USB: устройство
  • Linux и Unix - лучшая ОС в мире.