Я потратил некоторое время на просмотр потоков и не думаю, что какой-либо синтаксис отключен, пожалуйста, скажите мне, почему он не выполняет сценарий.
udev
правило:
ACTION=="add", KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{serial}=="C*", RUN+="/usr/bin/log-cp-usb.sh", OPTIONS="last_rule"
скрипт log-cp-usb.sh
:
rsync -av /home/pi/Downloads /media/pi/41AA-EDC6
Я пробовал несколько вариантов правила (последнее добавление - тег OPTIONS) и Сценарий запускается успешно, вызывая его напрямую. Thoughts?
Обновление: я прошу прощения, у моего сценария действительно есть #!/bin/bash
вверху (я пропустил, потому что я думал, что это будет предполагаться). Я также попытался #!/bin/sh
, и скрипт находится в папке назначения пути и является исполняемым. Я могу зайти в папку и выполнить скрипт, используя ./log-cp-usb.sh
, используя эту команду за пределами папки, файл не возвращается, поэтому путь должен быть достаточным для команды правила. @dessert Я попробовал последний совет безрезультатно. Он просто не будет работать при вставке USB.
Обновление: я вернулся к основам и упростил код. Я все еще использую сценарий bash, на который указывает правило udev
.
правило:
KERNEL=="sdb1", SUBSYSTEM=="block", RUN+="/usr/bin/autocopy"
скрипт по пути /usr/bin/autocopy
:
#!/bin/bash
cp -a /home/pi/Downloads/. /media/pi/41AA-EDC6/
Вход в каталог /usr/bin
и выполнение ./autocopy
успешно копирует содержимое папки загрузок в назначенный путь, по которому монтируется usb. Проблема все еще остается в том, что даже с созданным правилом скрипт не запускается при первой вставке usb. Совет?
Обновление: все сценарии были выполнены с использованием chmod +x
, в то время как в каталоге файлов они были созданы, то есть в то время как в /usr/bin
я выполнил chmod +x *script name*
для log-cp-usb.sh
и autocopy
. Оба они независимо выполняются с помощью команды ./
, но правило udev
не будет RUN+=
их
Обновление: sudo visudo
также было обновлено путем добавления pi ALL=(ALL) NOPASSWD: /usr/bin/*script name*
для обоих autocopy
и log-cp-usb.sh
[ 1137]