backupscript Fragen udev und shellscrip

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

backupscript Fragen udev und shellscrip

Beitrag von mclien » 16.09.2008 21:12:02

Hi Zusammen,

der Plan:
externe USB Platte. Beim einschlaten/ Anstöpseln erkennt UDEV via rule die Platte und startet das Script zum mounten und rsyncen und unmountet danach.

die udev Regel:

Code: Alles auswählen

leviathan:~# cat /etc/udev/rules.d/z47_backup.rules
KERNEL=="sd*", ATTRS{serial}=="00df4B11", NAME="backup%n",  RUN+="/root/extern_backup.sh"
das script:

Code: Alles auswählen

leviathan:~# cat extern_backup.sh
#!/bin/bash

# mounten
mount /dev/backup1 /externe_platte

#### backupscript mitsichern
rsync /root/extern_backup.sh /externe_platte
#### sichern von homes inkl. mail inboxen
rsync -av /home/ /externe_platte/home --backup --backup-dir=/externe_platte/leviathan_mail_removed/$DATE

# unmounten
umount /externe_platte
Bisher:
Habe kurz nach dem Einschalten mit mount festgestellt, daß die Platte nicht gemountet ist, rsync lief aber
Nahm also an das in das ungemountete dir gesync wird, also kill bemüht
Danach festgestellt, daß die Platte doch gemountet ist und der rsync wieder lief und sich nicht killen ließ
--> reset :-(

Nun die Fragen:
-muß ich irgendwo ein sleep einbauen oder was anderes?
-wie stelle ich es an, daß das script mich nach nach Durchlauf benachrichtigt?

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: backupscript Fragen udev und shellscrip

Beitrag von gms » 16.09.2008 22:35:27

mclien hat geschrieben: -muß ich irgendwo ein sleep einbauen oder was anderes?
eher das Gegenteil, solange dein Backupscript lauft ist der Udev blockiert. Daher solltest du dein Script auch vom Terminal detachen:
Hier findest du ein Beispiel: http://blog.apokalyptik.com/2007/10/24/ ... scriptors/

und zusätzlich auch ein Error-Handling einbauen, z.B nach dem "mount"-Kommando gehört überprüft, ob dieses erfolgreich war, ansonsten solltest du nicht mit rsync starten
mclien hat geschrieben: -wie stelle ich es an, daß das script mich nach nach Durchlauf benachrichtigt?
[/quote]
mittels z.B "sendEmail" ein Mail an dich schicken

Gruß
gms

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: backupscript Fragen udev und shellscrip

Beitrag von mclien » 17.09.2008 10:05:32

gms hat geschrieben: eher das Gegenteil, solange dein Backupscript lauft ist der Udev blockiert. Daher solltest du dein Script auch vom Terminal detachen:
Hier findest du ein Beispiel: http://blog.apokalyptik.com/2007/10/24/ ... scriptors/
Brauche davon nur diesen Teil?:

Code: Alles auswählen

start)
    exec 3>&- # close stdin
    exec 2>&- # close stdout
    exec 1>&- # close stderr
    ;
stop)
oder muß ich erst das mit dem PID file noch verstehen?

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: backupscript Fragen udev und shellscrip

Beitrag von gms » 17.09.2008 15:20:11

Von Udev wird das Script mit dem Argument "start" aufgerufen, das Script schließt diese Filedeskriptoren und ruft sich selbst im Hintergrund über "nohup" nochmals mit dem Argument "run" auf. Erst wenn das Script mit diesem Argument aufgerufen wird, sollte die eigentliche Arbeit erfolgen.

Das PID-File brauchst du nur, wenn du auch die "stop" Funktionalität einbauen möchtest

Gruß
gms

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: backupscript Fragen udev und shellscrip

Beitrag von mclien » 17.09.2008 19:59:53

kann ich denn dann nicht gleich im Hintergrund aufrufen?

Code: Alles auswählen

leviathan:~# cat /etc/udev/rules.d/z47_backup.rules
KERNEL=="sd*", ATTRS{serial}=="00df4B11", NAME="backup%n",  RUN+="/root/extern_backup.sh &"

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: backupscript Fragen udev und shellscrip

Beitrag von gms » 17.09.2008 20:15:39

mclien hat geschrieben:kann ich denn dann nicht gleich im Hintergrund aufrufen?
kann ich dir nicht sagen ob das genügt. Das Problem ist, daß die Shell, in der das Script abgearbeitet wird, die offenen Filedeskriptoren erbt. Die Standard-Filedeskriptoren können leicht geschlossen werden, etwaige zusätzlich offene Filedeskriptoren werden beim Aufruf von nohup nicht weitervererbt.
Bei deinem Ansatz ( sofern Udev das Starten im Hintergrund überhaupt beherrscht ), müßtest du die zusätzlichen Filedeskriptoren auch schließen.
Du kannst zwar leicht über /proc/self/fd herausfinden, welche das wären, aber ich kenne jetzt keine Möglichkeit, wie diese in einem Shellscript geschlossen werden könnten.
Mit einer Shellariablen wird das Schließen nicht funktionieren:

Code: Alles auswählen

exec ${fd}>&-
Was stört dich eigentlich an dem "nohup" ?
Gruß
gms

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: backupscript Fragen udev und shellscrip

Beitrag von mclien » 18.09.2008 08:56:43

gms hat geschrieben: Was stört dich eigentlich an dem "nohup" ?
Gruß
gms
Am "nohup" selbst erstmal gar nix. Aber wie Du sicher schon bemerk hast bin ich noch Anfänger bei scripten, sodaß mich wohl hauptsächlich mein Unwissen abhält.

Gruß

mc"ich lese erstmal die nohup Doku"lien ;-)

Antworten