como executar um script toda vez que qualquer USB for montado

4

Eu uso um script que grava todos os pontos de montagem dos meus dispositivos em um arquivo de texto usando df. Como posso executar meu script toda vez que algum dispositivo (especialmente USB) é montado?

script para executar:

#!/bin/bash
# save all mountpoints to textfile
df -h /dev/sd*| grep /dev/sd| awk '{print $6}' > /home/<user>/FirstTextfile
# do something
while read line 
do  
echo "mountpoint:${line%/*}/ devicename:${line##*/}}" >> home/<user>/AnotherTextfile

Debian 8.0 (jessie), Linux 3.16.0, Gnome 3.14.

    
por schmiddl 10.06.2015 / 22:23

2 respostas

1

escreve uma regra do udev que primeiro monta a unidade USB e a segunda executa o meu-script

# cat /etc/udev/rules.d/11-media-by-label-with-pmount.rules

KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end"
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_by_label_auto_mount_end"

# Get label
PROGRAM=="/sbin/blkid -o value -s LABEL %N", ENV{dir_name}="%c"

# use basename to correctly handle labels such as ../mnt/foo
PROGRAM=="/usr/bin/basename '%E{dir_name}'", ENV{dir_name}="%c"
ENV{dir_name}=="", ENV{dir_name}="usbhd-%k"

ACTION=="add", ENV{dir_name}!="", RUN+="/bin/su YOURUSERNAME -c '/usr/bin/pmount %N %E{dir_name}'", RUN+="/etc/udev/scripts/my-script.sh"
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/su YOURUSERNAME -c '/usr/bin/pumount /media/%E{dir_name}'"
LABEL="media_by_label_auto_mount_end"

nota: A unidade é montada pela raiz mas pode ser desmontada pelo usuário dado. No último bloco, você precisa alterar YOURUSERNAME com seu nome de usuário e /etc/udev/scripts/my-script.sh com o caminho para seu script. Fonte e mais scripts: link

Outra solução é usar um wrapper do udisks como devmon .

    
por 17.06.2015 / 11:26
1

O Linux não possui um gancho que é executado quando um dispositivo é montado em todas as circunstâncias.

O Udev lida com dispositivos quando eles aparecem no sistema. Ele pode executar um comando nesse ponto ( example ). Embora você possa executar mount do udev, isso entra em conflito com os Udisks e, em particular, não funciona em sistemas usando systemd . É possível monitorar as montagens realizadas pelos Udisks , mas não sei como fazer isso a partir do comando linha. Há um exemplo de Python no wiki do Gentoo .

Existe um recurso para monitorar chamadas arbitrárias do sistema: o sistema de auditoria . O comando a seguir aciona uma entrada de log sempre que a chamada do sistema mount retornar:

auditctl -a exit,always -S mount

Você pode acionar um programa de um evento de auditoria por meio do audisp , mas isso não é muito conveniente: você precisa escrever um plugin que analise o evento de auditoria.

    
por 11.06.2015 / 00:44