copiando um arquivo de um armazenamento USB se ele existir com as regras do udev

2

Eu tenho uma regra do udev simples para combinar dispositivos de armazenamento USB que executam um script simples que procura por um arquivo no USB. Estou usando o pacote usbmount para montar automaticamente o USB. Como a documentação diz, os dispositivos USB serão montados em /media/usb{0..7} .

Quando o dispositivo de armazenamento USB é detectado, eu executo esse script

#!/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

O problema é que, quando o script é executado automaticamente após o USB ser conectado, ele resulta em um arquivo de log no qual ele diz que o arquivo não pode ser encontrado em nenhum dos diretórios acima (embora exista). Quando eu, então, manualmente executo o script, ele trabalha e copia o arquivo zip para onde eu queria.

Eu tentei definir um tempo de espera antes que o script fosse executado por 10 segundos para ver que talvez o USB não tenha sido montado no momento em que o script foi executado, mas recebo o mesmo resultado final.

    
por kfirba 13.09.2015 / 15:52

1 resposta

2

Provavelmente, o usb não foi montado no momento em que sua regra é processada. Tente adicionar um hook ao usbmount, ou seja, crie um arquivo chamado /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

torne-o executável:

chmod +x /etc/usbmount/mount.d/10_autocopy.sh

variáveis definidas para scripts de montagem (/etc/usb/mount.d):

  • UM_DEVICE: dispositivo montado
  • UM_MOUNTPOINT: ponto de montagem do dispositivo
  • UM_FILESYSTEM: tipo de sistema de arquivos
  • UM_MOUNTOPTIONS: opções de montagem
  • UM_VENDOR: string de fornecedor do dispositivo
  • UM_MODEL: string de modelo ou produto

variáveis definidas para desmontar scripts (/etc/usb/umount.d):

  • UM_DEVICE: dispositivo montado
  • UM_MOUNTPOINT: ponto de montagem do dispositivo
  • UM_FILESYSTEM: tipo de sistema de arquivos

Nota:

  • todos os scripts são executados por padrão como usuário root.
  • usbmount usa o recurso syslog se VERBOSE = yes - /etc/usbmount/usbmount.conf
por user448115 13.09.2015 / 16:42