ubuntuusers.de

Backupscript/ Herunterfahren verzögern

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

Sayyadin

Anmeldungsdatum:
3. Juni 2009

Beiträge: 60

Wohnort: Freiberg

Hallo,

ich möchte mit einem Skript jedes mal beim Herunterfahren das Homeverzeichnis eines Users durch ein Backup ersetzen.

Dies soll bewirken, dass ein öffentlicher Nutzer zwar das Profil "zerstören" kann, aber es einfach nach jedem Neustart wieder so aussieht, wie ich es vorgesehen hab. Dabei werden Dateien, die im Homeverzeichnis abgelegt sind erhalten, es werden aber alle veränderten Config-Dateien gelöscht und aus dem Backup wiederhergestellt. Hierbei geht es um ca 1GB Daten, da eine Wineinstallation inklusive ist.

Das klappt soweit auch ganz gut, wenn ich es per Hand ausführe. Das Ganze sieht ungefähr so aus:

#! /bin/bash
rm -r /home/schueler/.[!.]*
cp -ra /home/restore/* /home/restore/.[!.]* /home/schueler/
exit 0

Soweit so gut.

Jetzt möchte ich es aber automatisieren. Zuerst hab ich es einfach in /etc/rc.local eingetragen. Dies führte allerdings dazu, dass die Konfigurationsdatein bereits gelöscht waren, aber noch nicht wieder zurückkopiert, als das Autologin zuschlug. Also die Idee es einfach beim Herunterfahren zu machen, nachdem der User ausgelogt ist. Ich habe daher in /etc/rc0.d einen Link zu dem Skript eingefügt. Leider fährt sich Ubuntu runter ohne das Ende des Skriptes abzuwarten.

Also hab ich mir ein einfaches Init-Skript geschrieben. Hier soll zu Testzwecken nur eine 500MB-Datei kopiert werden. Das hab ich in /etc/init.d abgelegt, ausführbar gemacht und mit update-rc.d test stop 0 6 . in den Herunterfahrprozess eingebunden.

test:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          Was macht das Skript?
# Required-Start:    
# Required-Stop:     
# Default-Start:     
# Default-Stop:      0 6
# Short-Description: Kurze Beschreibung
# Description:       Längere Bechreibung
### END INIT INFO
# Author: Name <email@domain.tld>

# Aktionen
case "$1" in
    start)
        
        ;;
    stop)
        mkdir /home/abc
	echo "Skript gestartet "+`date` >>/home/abc/test.txt
	/bin/cp /home/say/Datei /home/abc/ >> /home/abc/test.txt
	echo "Skript beendet "+`date` >>/home/abc/test.txt
        ;;
    restart)
        
        ;;
esac

exit 0

Wenn ich es per /etc/init.d/test stop ausführe klappt alles.

Beim Herunterfahren hingegen wird nur das Verzeichnis angelegt und das echo für gestartet und beendet in die Datei geschrieben (Zeitdifferenz 1 Sekunde).

Allerdings das Kopieren wird nicht ausgeführt.

Weiss jemand, welchen Fehler ich mache oder wie ich Ubuntu sage, er soll erst mit dem Herunterfahren weitermachen, wenn das Skript erfolgreich abgeschlossen ist (egal wo eingetragen)?

Schonmal danke fürs lesen und sorry für den vielen Text.

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

Beim Herunterfahren, fängt irgendwann einmal das System an und koppelt alles ab, was schlafen gelegt werden muss. Dazu gehören auch Platten und die Filesysteme, die drauf sind.

Du musst also sicherstellen, dass dein Job vor diesen Aktionen erledigt ist und das System erst dann mit der Demontage der Betriebsmittel weitermacht. Um sicherszustellen, wann ein systembedingter Start oder Stopp eines Dienstes stattfindet, muss man Required-Start und Required-Stop festlegen.

Das gibt es bei dir nicht. Er startet deinen Job und dann nimmt er keine Rücksicht mehr - du hast keine Bedingungen angegeben.

In deinem Required-Stop müsste mindestens mal '$local_fs' (als Forderung, weil das lokale Filesystem noch benötigt wird) drin stehen.

Dein Script muss dann natürlich neu installiert werden!

Sayyadin

(Themenstarter)

Anmeldungsdatum:
3. Juni 2009

Beiträge: 60

Wohnort: Freiberg

Hallo,

ich habe das in das Skript eingefügt und ich habe meinen Fehler gefunden, der mich hier seit Stunden fuchst. Wenn man solche Skripte testet, sollte man nicht versuchen aus dem eigenen verschlüsselten Homeverzeichnis zu kopieren, sondern von irgendwo anders her.

Jetzt wird alles sauber kopiert und Ubuntu wartet auf des Ende des Kopierens und fährt dann runter.

Ich kann daher sagen, dass die im Start ausgeführten Sachen als einfaches Backupscript ausreichen.

Gibt es irgendwo eine Übersicht über die möglichen Variablen für required-start und -stop? Dann könnte ich bei Required-Stop einfach noch gdm reinnehmen um sicherzustellen, dass der User komplett ausgeloggt ist.

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

Für dein Anliegen könnte auch UnionFS Intressant sein anstatt die ganze Zeit Backups wiederherzustellen.

Mit UnionFS kannst du ein "Overlay" aus zwei Dateisystemen erzeugen. Das eine Dateisystem ändert sich nicht und änderungen werden immer zu einem anderen Dateisystem geschrieben. Das Konzept findest du bei den ganzen LiveCDs zum Beispiel wieder. Die eigentlichen Dateien auf der CD-ROM sind nicht änderbar da es ein Read-Only Dateisystem ist. Es wird aber ein Dateisystem in einer Ramdisk erzeugt und mit UnionFS werden diese vereint. So das änderungen von Dateien nicht im Original landen, sondern im RAM landen.

Das ganze Konzept kannst du generell auch mit Zwei verzeichnissen machen. Dein Ursprüngliches Home verzeichnis das sich nicht ändern soll dient als Unterlage, und du nutzt ein anderes verzeichnis als Overlay. So das wenn Dateien geändert werden diese zu einem neuen Verzeichnis geschrieben werden. Wenn den ursprünglichen zustand wiederherstellen möchtest so musst nur das Overlay verzeichnis löschen. Zum Beispiel beim logout.

Das ganze mal als eine zusätzliche Möglichkeit in den Raum geworfen.

Sayyadin

(Themenstarter)

Anmeldungsdatum:
3. Juni 2009

Beiträge: 60

Wohnort: Freiberg

Das bisschen was ich jetzt dazu gelesen hab, lässt es genau nach dem aussehen, was ich suche.

Naja, immerhin ein bissl was zum Initsystem gelernt. 😛

Danke für den Hinweis. Ist wie so oft, man muss erstmal wissen, was es gibt, dann kann man sich dazu auch einlesen.

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

http://refspecs.freestandards.org/LSB_4.0.0/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html

In den Required .... Angaben, kann man sich auf Script-Namen anderer Dienste beziehen oder solche genormten "Sammelbegriffe" wie z.B. '$local_fs' beziehen; speziell diese 'Facilities' stehen z.B. hier:

http://refspecs.freestandards.org/LSB_4.0.0/LSB-Core-generic/LSB-Core-generic/facilname.html

Antworten |