Autor Tópico: Script de backup com rsync quando drive é montado  (Lida 2154 vezes)

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Script de backup com rsync quando drive é montado
« Online: 22 de Abril de 2010, 23:48 »
Olá, a minha idéia era rodar automaticamente um script quando meu pendrive fosse plugado no computador de casa, para isso achei a seguinte solução :

http://ninetynine.be/blog/2009/03/ubuntu-backup-to-usb-drive-on-mount/

Como é antigo é necessário alterar alguns passos, fica fácil de entender vendo esse tutorial:

http://hackaday.com/2009/09/18/how-to-write-udev-rules/

Criei os seguintes arquivos:

Código: [Selecionar]
SUBSYSTEMS=="usb", KERNEL=="sd?1", ATTRS{idVendor}=="0951", ATTRS{idProduct}=="1607", MODE="0666", GROUP="casa", ATTRS{product}=="DataTraveler 2.0", NAME="irtigor_d", RUN+="/usr/bin/usb_backup.sh"
Código: [Selecionar]
#!/bin/sh
user=`whoami`
pids=`pgrep -u $user gnome-panel`
title=$1
text=$2
timeout=$3
icon=$4

if [ -z "$title" ]; then
 echo You need to give me a title >&2
 exit 1
fi
if [ -z "$text" ]; then
 text=$title
fi
if [ -z "$timeout" ]; then
 timeout=60000
fi

for pid in $pids; do
 # find DBUS session bus for this session
 DBUS_SESSION_BUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS \
 /proc/$pid/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`
 # use it

 #icon hack:
 if [ -z $icon ]; then
 DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS \
 notify-send -u low -t $timeout "$title" "$text"
 else
 DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS \
 notify-send -u low -t $timeout -i "$icon" "$title" "$text"
 fi
done

Código: [Selecionar]
#!/bin/bash
{
mount_point=$(grep IRTIGOR_D /etc/mtab)
attempts=1
while [ -z "$mount_point" ] && [ "$attempts" -le 50 ]; do
    # $mount_point has not been found
    # quit if this fails more than 50 times.
    # This should not be necessary, but it better to be safe
    # than have the script trapped in this loop forever for
    # some unforeseen reason.
    sleep 1
    mount_point=$(grep IRTIGOR_D /etc/mtab)
    attempts=$(($attempts+1))
done
 
if [ -n "$mount_point" ]; then
    su casa alt-notify-send --chmod=+x "Pendrive irtigor_d" "Fazendo backup" 5 "/home/casa/usbpendrive.png"
 
    rsync -cr --delete /media/IRTIGOR_D/ /home/casa/Backup/Pendrive
    chown casa: -R /home/casa/Backup/Pendrive
 
    su casa alt-notify-send "Pendrive irtigor_d" "Backup completo" 5 "/home/casa/usbpendrive.png"
fi
} &

 /etc/udev/rules.d/81-local.rules, /usr/local/bin/alt-notify-send e /usr/bin/usb_backup.sh respectivamente.

O script funciona para o que é proposto só que possui algumas coisas que, com a ajuda dos membros do fórum, eu gostaria de alterar:

1-No script original a variável $timeout recebe o valor 0 só que se eu executo com esse valor no lugar da mensagem aparecer no canto da tela (d-bus Notify?), ela aparece como um pop-up no centro da tela. O ideal seria a primeira mensagem ficar em loop até o fim do backup e ai sim mostrar a segunda mensagem (com tempo fixo como está).

2-Eu gostaria de usar como imagem o ícone usado pelo sistema para drive usb mas com abstração, eu não quero especificar o caminho para o ícone do meu tema atual.

Alguma sugestão?



Obrigado pela atenção.