Запустите правило 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 и объявить зависимости, которые вам нужны в вашем скрипте. Вам все равно нужно остерегаться потенциального состояния гонки.

  • Какой загрузчик использует Unetbootin?
  • Как подключиться к моей утилите usb-to-serial на OpenBSD
  • Как получить доступ к флэш-накопителю, который был извлечен без физического подключения и обратно?
  • USB-клавиатура автоматически отключается (без отсоединения)
  • Система распознает порт USB 3.0 как порт USB 2.0
  • Linux HID-драйвер для клавиатуры, отправляющий 1 дополнительный байт
  • USB-накопитель, отформатированный как «Live Live CD», сохраняет имя CD-ROM после повторного разбиения
  • Карта нестандартных скрытых отчетов для scancodes для игровой клавиатуры Logitech G105
  • Что означает последний выходной параметр команды lsusb -t?
  • USB Audio обнаружен ALSA, но не JACK?
  • Конечные точки USB 3.0 XCHI
  • Linux и Unix - лучшая ОС в мире.