Я пытаюсь настроить простой скрипт на выполнение всякий раз, когда к компьютеру подключается USB-накопитель. Для этой задачи у меня есть файл 100-usb.rules
в /etc/udev/rules.d
, который имеет очень общее правило:
ACTION=="add", RUN+="/usr/local/auto-update.sh"
Я ожидаю, что всякий раз, когда я подключаю что-либо к компьютеру, этот сценарий будет срабатывать. Причина, по которой правило такое общее, заключается в том, что неважно, какое правило я пробовал, скрипт просто НИКОГДА не запускался.
Теперь /user/local/auto-update.sh
скрипт имеет очень простую команду:
#!/bin/bash
mkdir /tmp/testfolder
Я убедился, что дал скрипту права на выполнение
sudo chmod +x /usr/local/auto-update.sh
после выполнения команды ls -l /usr/local/auto-update.sh
я получаю разрешения
-rwxr-xr-x
Странно то, что если я изменю свое правило так, чтобы оно выглядело примерно так
ACTION=="add", RUN+="/bin/mkdir /tmp/folder1"
Тогда оно действительно идет вперед и создает эту папку.
Я действительно потерялся здесь... Я понятия не имею, почему это не работает!
Проблема состоит в том, что udev
не обеспечивает PATH
в ее экспортируемой среде при запущении скриптов.
Добавляют PATH=/bin:/usr/bin:/usr/local/bin
или безотносительно к запуску Вашего сценария удара.
, Например, я вывел огибающее содержание, когда мой сценарий назвали, поскольку флеш-карта была включена и добралась:
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0/host4
DEVTYPE=scsi_host
ID_BUS=usb
ID_MODEL=Transcend
ID_MODEL_ENC=Transcend
ID_MODEL_ID=4000
ID_REVISION=0035
ID_SERIAL=TS-RDF5_Transcend_000000000036
ID_SERIAL_SHORT=000000000036
ID_TYPE=scsi
ID_USB_DRIVER=usb-storage
ID_USB_INTERFACES=:080650:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=TS-RDF5
ID_VENDOR_ENC=TS-RDF5\x20
ID_VENDOR_ID=8564
SEQNUM=2023
SUBSYSTEM=scsi
USEC_INITIALIZED=65380632
т.е. никакой ПУТЬ.