копирование файла с USB-накопителя, если оно существует с помощью правил udev

У меня есть простое правило 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 не был установлен к моменту запуска скрипта, но я получаю тот же конечный результат.

1
задан 13 September 2015 в 16:52

1 ответ

Вероятно, 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
2
ответ дан 23 May 2018 в 17:30
  • 1
    Как выполняется этот скрипт? где создается $UM_MOUNTPOINT? Я предполагаю, что то, что вы пытаетесь сделать, - это добавить крюк, который, когда usbmount монтирует USB, будет смотреть на него со сценарием, который вы написали выше? – kfirba 13 September 2015 в 17:52
  • 2
    Кажется, он не копирует файл в нужное место. Любая идея почему? – kfirba 13 September 2015 в 17:58
  • 3
    Я просто изменил имя файла как 10_autocopy вместо autocopy.sh, и он работает. Большое спасибо! Я искал любые крючки, которые могут быть запущены usbmount, но документации не было, поэтому я не знал об этом. БЛАГОДАРЯ! – kfirba 13 September 2015 в 18:03
  • 4
    Было бы здорово, если бы вы могли перечислить переменные, доступные в этих сценариях для справки. Кроме того, под каким пользователем выполняется скрипт и имеет ли он переменную PATH, установленную где-либо еще в системе? У него также есть журнал ошибок? – kfirba 13 September 2015 в 18:18

Другие вопросы по тегам:

Похожие вопросы: