У меня есть простое правило udev для соответствия USB-устройствам хранения, которые запускают простой скрипт, который ищет файл на USB-устройстве. Я использую пакет usbmount для автоматической установки USB. Как указано в документации, USB-устройства будут установлены на /media/usb{0..7}.
Когда обнаружено запоминающее устройство USB, я запускаю этот скрипт
#!/bin/bash
options=("usb0" "usb1" "usb2" "usb3" "usb4" "usb5" "usb6" "usb7")
for dir in "${options[@]}"
do
lookup="/media/$dir/luah_v2_version.zip"
if [ -e "$lookup" ]; then
cp $lookup /home/luah
exit 0
else
echo "could not find $lookup" >> /home/luah/log
fi
done
. Дело в том, что когда сценарий запускается автоматически после подключения USB-порта, в результате он приводит к файлу журнала, где говорится, что файл не может быть найден ни в одном из вышеперечисленных каталогов (пока он существует). Когда я вручную запускаю скрипт, он работает и копирует zip-файл туда, где я хотел.
Я попытался установить время ожидания до того, как скрипт выполнит 10 секунд, чтобы увидеть, что USB не был установлен к моменту запуска скрипта, но я получаю тот же конечный результат.
Вероятно, usb не был установлен во время обработки вашего правила. Попробуйте добавить крючок к usbmount, т. Е. Создайте файл с именем /etc/usbmount/mount.d/10_autocopy.sh
#!/bin/sh
[ -f $UM_MOUNTPOINT/luah_v2_version.zip ] && cp $UM_MOUNTPOINT/luah_v2_version.zip /home/luah
, затем сделайте его исполняемым:
chmod +x /etc/usbmount/mount.d/10_autocopy.sh
переменные set для сценариев монтирования (/etc/usb/mount.d):
UM_DEVICE: смонтированное устройство UM_MOUNTPOINT: точка монтирования устройства UM_FILESYSTEM: тип файловой системы UM_MOUNTOPTIONS: параметры монтирования UM_VENDOR: строка поставщика устройства UM_MODEL: модель или строка продуктадля сценариев монтирования (/etc/usb/mount.d):
UM_DEVICE: смонтированное устройство UM_MOUNTPOINT: точка монтирования устройства UM_MOUNTPOINT: точка монтирования устройстваПримечание:
UM_MOUNTPOINT: точка монтирования устройства [ ! d16] usbmount использует средство syslog, если VERBOSE = yes - /etc/usbmount/usbmount.conf