Script Bash não copiando arquivos usando o udev

3

Eu tenho um script configurado para ser executado quando uma certa unidade USB é inserida. É suposto copiar uma pasta da unidade USB em uma pasta de backup e escrever sobre esta pasta, se já existir. No entanto, quando eu conecto meu drive USB, ele cria a pasta, mas não copia nenhum arquivo.

As minhas regras são assim:

ACTION=="add", ATTR{idVendor}==Vendor, ATTR{idProduct}==Product, RUN+="/bin/sh /path/to/file/mkBackup"

Meu arquivo mkBackup se parece com isto:

#!/bin/bash
a="/path/to/file/Backup"
if [ -e $a ]; then
        rm -rf $a
fi
mkdir $a
cp -r /path/to/usb/folder $a

Quando ele é executado por udev , a pasta Backup é criada, mas está vazia, mas quando eu executo apenas ./mkBackup , a pasta é criada e tudo é copiado. Esta é a primeira vez que uso udev para fazer algo assim, então, por favor, me perdoe se isso parecer uma questão simples. Obrigado antecipadamente.

    
por acn3 02.11.2016 / 03:58

1 resposta

0

Dado que a pasta Backup é criada, você sabe que o script é executado com sucesso quando você faz o plugin do dispositivo. Eu suspeito que o script está sendo executado antes de o dispositivo realmente terminar de montar. Assim, os arquivos ainda não estão disponíveis para cp .

O que acontece se você adicionar sleep 5 após mkdir $a ? Ou se você tentar copiar arquivos existentes?

Este link também é bastante útil como referência.

Eu também uso:

udevadm monitor --udev

Para assistir a eventos do udev em tempo real.

udevadm test /path/to/dev

Para simular uma execução de evento do udev para o dispositivo. Note que isso faz não executar qualquer programa especificado por uma tecla RUN.

EDIT: Como Gilles assinala, minha ideia não funciona. E eu não estou ciente de uma solução. Aqui está o porquê:

O Udev disponibilizará o dispositivo USB para o sistema operacional. Em seguida, o SO perceberá que o sistema operacional contém um sistema de arquivos montável e o montará. Nesse ponto, os arquivos no dispositivo USB estão realmente disponíveis.

Qualquer script executado por uma regra do udev executará antes de o sistema de arquivos ser montado. Se eu pensar em uma alternativa, atualizarei o post.

    
por 02.11.2016 / 07:47