Das volle Skript wird nicht viel helfen. Es enthält hauptsächlich ein paar Aufrufe von mount/umount, rsync und ein paar ifs um mit möglichen Fehlern umzugehen und ein paar echos um Output auf tty8 zu erzeugen. Modulo der Ifs und einige der echos macht das fragliche Skript /usr/local/bin/usbbackup folgendes:
Code: Alles auswählen
#!/bin/bash
chvt 8 #Auf tty8 wechseln.
exec &> /dev/tty8 #Ausgabe umleiten.
[...] #hier wird das Backup mit rsync gemacht und bei Fehlern abgebrochen.
echo -ne "Backup at `date \"+%F %T\"` \E[32;40mfinished successfully!\E[0m\r\f" #Bestätigung auf tty8.
echo "Backup at `date \"+%F %T\"` finished successfully\!" | /usr/bin/mail -s "Backup" root #Email verschicken.
echo "Backup at `date \"+%F %T\"` finished successfully\!" >> /tmp/lastusbbackup #Test ob alles durchgelaufen ist.
exit 0
Die udev Regel die zum Aufruf führt ist folgende:
Code: Alles auswählen
BUS=="usb", KERNEL=="sd?1", SYSFS{idProduct}=="b159", SYMLINK+="externalbackup", RUN+="/usr/local/bin/usbbackup"
Nach dem Aufrum des Skripts durch udev enthält /tmp/lastbackup auch die durch das letzte echo erzeugte Zeile, das Backup wird erstellt und die Bestätigung auf tty8 ausgegeben.
Wenn ich das Skript manuell aufrufe wird auch die Email verschickt, aber eben nicht wenn das Skript durch udev gestartet wurde.
"Linux supports the notion of a command line or a shell for the same reason that only children read books with only pictures in them." - Bill Garrett