Executa um comando quando um dispositivo é conectado via USB

3

Atualmente, tenho um sistema que faz o backup do meu servidor Linux em um dispositivo de armazenamento USB em /media/usb . Isso tudo funciona corretamente. No entanto, eu realmente tenho duas unidades que tentamos trocar diariamente.

Existe alguma maneira de registro quando um dispositivo USB foi conectado e uma maneira de usar sendmail ou algo semelhante para enviar um e-mail para o administrador se a unidade não tiver sido trocada por 3 ou mais dias, por exemplo?

    
por Schodemeiss 18.06.2012 / 10:02

2 respostas

7

Você poderia analisar / var / log / messages, mas eu não faria isso.

Eu escreveria uma regra do udev que executasse um script quando você conectasse / desconectasse o dispositivo. Há mais algumas informações sobre isso aqui

Eu copiei os pontos principais no caso de o site ficar inativo:

Rule files are stored in the /etc/udev/rules.d/ directory.

There's some advice from the README in that directory on how to name rule files:

Files should be named xx-descriptive-name.rules, the xx should be chosen first according to the following sequence points:

< 60 most user rules; if you want to prevent an assignment being overriden by default rules, use the := operator.

these cannot access persistent information such as that from vol_id

< 70 rules that run helpers such as vol_id to populate the udev db

< 90 rules that run other programs (often using information in the udev db)

=90 rules that should run last

     

A primeira parte de uma regra do udev é as chaves correspondentes. Nós vamos usar o   Entrada KERNEL do topo da cadeia, bem como o idVendor,   idProduct e atributos seriais das informações específicas do dispositivo.   Isto irá identificar positivamente este pen drive e ignorar   todos os outros. O argumento do kernel usa um ponto de interrogação como um curinga   de modo que, se nossa unidade fosse montada em um nó diferente (por exemplo: sda1, sdb1,   sdc1, etc.) ainda pode ser identificado.

KERNEL=="sd?1", ATTRS{idVendor}=="13fe", ATTRS{idProduct}=="1f00",
ATTRS{serial}=="50E6920B000AE8" 

Now that we have the keys necessary to identify the particular hardware we’re looking for we can add assignment arguments. In our case we added two. The first creates a symlink to this device inside of the /dev/ directory. The second executes a script in our home directory:

SYMLINK+="hackaday", RUN+="/home/mike/notify-plugin.sh 'HackaDay Thumbdrive:' 'Connected as: $KERNEL'" 

Here is the final rule assembled into one line:

KERNEL=="sd?1", ATTRS{idVendor}=="13fe", ATTRS{idProduct}=="1f00", ATTRS{serial}=="50E6920B000AE8", SYMLINK+="hackaday", RUN+="/home/mike/notify-plugin.sh 'HackaDay Thumbdrive:' 'Connected as: $KERNEL'" 

We added this as the only line in our rule file and then restarted udev using these commands:

sudo nano /etc/udev/rules.d/81-thumbdrive.rules 
sudo /etc/init.d/udev restart
    
por 18.06.2012 / 11:41
1

Sim, toda vez que você conecta ou desconecta um dispositivo USB, uma mensagem (ou mensagens) é gravada em / var / log / messages. Você pode facilmente verificar isso usando o comando dmesg. Não seria totalmente irracional analisar esse arquivo a cada (x) unidades  de tempo para verificar se há mensagens de conexão / desconexão e agir de acordo.

    
por 18.06.2012 / 11:10