ubuntuusers.de

Bash-Skript beim Herunterfahren ausführen - wie?

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

bueffel110

Anmeldungsdatum:
15. Dezember 2006

Beiträge: 291

BASH kopier-script:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 09.04.2018
# bash kopieren.sh  # Aufrufen aus dem Verzeichiss, wo es steht.
# ************************************************
#!/bin/bash
# ****************************************************************************
# * BACKUP: Alle Dateien weden von SSD -> HDD kopieren; [Die Alten löschen!] *
# ****************************************************************************
#--archive 	-a 	Archiv-Modus = -Dgloptr (-Do benötigen root-Rechte!)
#                      	-D 	Geräte + Spezialdateien transferieren (nur root!)
#--group 		-g 	Besitzer-Gruppe transferieren
#--links 		-l 	Symbolische Links transferieren
#--owner 		-o 	Besitzer transferieren (nur root!)
#--perms 		-p 	Zugriffsrechte transferieren
#--times 		-t 	Datum transferieren
#--recursive 		-r 	Ganze Verzeichnis-Bäume replizieren
#               -v 	zeigt während des Synchronisierens alle ausgeführten Schritte an 
#--dry-run 	-n 	Aktionen nur anzeigen, NICHT ausführen
##
Quelle="/home/knabe/aktuelle-Daten/"
Ziel="/media/knabe/Schublade/aktuelle-Daten"
echo "Alle Unterordner & Dateien werden von: $Quelle nach $Ziel kopiert."
rsync -av $Quelle $Ziel # Alle Unterordner & Dateien ohne "/aktuelle-Daten" werden kopiert.

Beim Herunterfahren will ich dieses kopier-script laufen lassen. Wie ?

Bearbeitet von Cruiz:

Titel präzisiert.

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

Eine von vielen Möglichkeiten:

Du hängst das shutdown an das Skript an und startest zum Abschalten nur das Skript.

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

Ach ja, gelöschte Dateien in der Quelle werden im Ziel bei deiner Methode behalten. Nur zur Info - für ein Restore kann das relativ unübersichtlich werden. Eine 1:1 Kopie geht mit --delete, dann werden gelöschte Dateien auch im Ziel gelöscht, was aber auch Nachteile hat (menschliches Versagen).

Ich nutze meist noch --backup und/oder --backup-dir, vielleicht willst du dir damit das Skript noch "aufbohren".

Gruß BillMaier

bueffel110

(Themenstarter)

Anmeldungsdatum:
15. Dezember 2006

Beiträge: 291

Ubuntu startet bestimmt ein BS-Skript, wenn man Herunterfahren wählt, ich will das Kopier-Script anhängen. Wie macht man es?

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4673

Wohnort: Berlin

@bueffel110: Warum bist Du Dir da so sicher das beim herunterfahren ein BS-Skript (BS = Bash?) startet? Das Problem beim herunterfahren ist, dass da alles was zu lange dauert irgendwann gekillt wird, damit nicht irgend ein Programm das herunterfahren unendlich lange aufhalten kann. Sei es nun aus Absicht, oder weil es hängt. Und bei einem Sicherungsskript möchte man ja, dass es wirklich alles sichert, also garantiert bis zum Ende durch läuft, und nicht während des Sicherns hart beendet wird, weil es zu lange läuft.

Am sichersten ist es also wenn man, wie von BillMaier vorgeschlagen, das herunterfahren am Ende des Sicherungsskripts auslöst und das Sicherungsskript manuell startet.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11248

Wohnort: München

bueffel110 schrieb:

Ubuntu startet bestimmt ein BS-Skript, wenn man Herunterfahren wählt

Von sich aus schon länger nicht mehr - das ist ein DBus-Befehl an den Session Manager, der das an logind weiterreicht und dann wird Systemd genutzt, um das System über das poweroff.target herunterzufahren. Du könntest mit einem Tool wie dem dem dbus-monitor beobachten, was da auf dem Session- und dem System-Bus passiert (ggf. dessen Ausgabe per netcat an einen zweiten Rechner oder in eine Datei weiterleiten, damit du Zeit hast, es zu lesen, denn das System wird ja heruntergefahren).

Es gibt allerdings die Möglichkeit ein Shell-Skript vor dem Standby/Deep Sleep/Shutdown ausführen zu lassen: https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html

Immediately before executing the actual system halt/poweroff/reboot/kexec systemd-shutdown will run all executables in /usr/lib/systemd/system-shutdown/ and pass one arguments to them: either "halt", "poweroff", "reboot" or "kexec", depending on the chosen action. All executables in this directory are executed in parallel, and execution of the action is not continued before all executables finished.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4673

Wohnort: Berlin

Wobei man kurz vor dem halt davon ausgehen sollte, dass nichts mehr ”da” ist, also kein Netz, keine Dienste, und vielleicht/wahrscheinlich auch nichts mehr was mal unter /media eingehängt war. Das schränkt einen dann etwas ein was die Ziele für eine Datensicherung angeht.

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

seahawk1986 schrieb:

dann wird Systemd genutzt, um das System über das poweroff.target herunterzufahren.

Dann lässt sich das sicher auch über eine Abhängigkeit der systemd Units lösen. Dazu müsste man das Backup-Skript in eine systemd/Unit verpacken. Allerdings ist der einzige Vorteil, den ich sehe, dass das Backup auch dann ausgeführt wird, wenn man den Rechner über "herunterfahren" herunter fährt. Ob sich der Aufwand lohnt, kommt auf die Benutzeranzahl an und das Interesse an systemd - bzw. sich in was einzuarbeiten.

Gruß BillMaier

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

Marc_BlackJack_Rintsch schrieb:

Wobei man kurz vor dem halt davon ausgehen sollte, dass nichts mehr ”da” ist, also kein Netz, keine Dienste, und vielleicht/wahrscheinlich auch nichts mehr was mal unter /media eingehängt war. Das schränkt einen dann etwas ein was die Ziele für eine Datensicherung angeht.

guter Punkt!

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4673

Wohnort: Berlin

@bueffel110: Vielleicht noch eine Anmerkung zum Skript:

Die #!/bin/bash-Zeile gehört an den Anfang des Skripts, denn nur dort hat sie ihre spezielle Bedeutung. Und man muss das Skript dann auch nicht mehr explizit mit der bash ausführen.

Zudem würde ich $Quelle und $Ziel beim Aufruf von rync in doppelte Anführungsstriche setzen. An der Stelle lieber defensiv programmieren als irgendwann einmal über Probleme zu stolpern weil etwas nicht passend gequoted ist.

bueffel110

(Themenstarter)

Anmeldungsdatum:
15. Dezember 2006

Beiträge: 291

BillMaier schrieb:

Du hängst das shutdown an das Skript an und startest zum Abschalten nur das Skript.

Das ist eine gute Idee. Kann man das Skript auch mit einer (hoffentlich nicht) belegten Funkt. Taste starten? Bei mir: F3-F 12, die ich noch nie benutzt habe.

Marc_BlackJack_Rintsch schrieb:

@bueffel110: Vielleicht noch eine Anmerkung zum Skript:

Die #!/bin/bash-Zeile gehört an den Anfang des Skripts, denn nur dort hat sie ihre spezielle Bedeutung. Und man muss das Skript dann auch nicht mehr explizit mit der bash ausführen.

Der Präprossesor finde durch "#!" und führt "/bin/bash <Skript-name>" aus.

Zudem würde ich $Quelle und $Ziel beim Aufruf von rync in doppelte Anführungsstriche setzen.

Aber das Skript läuft.

Kann man tesen ob "/media/knabe/Schublade" angeschlossen ist?

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

bueffel110 schrieb:

Kann man tesen ob "/media/knabe/Schublade" angeschlossen ist?

mountpoint /media/knabe/Schublade

Das ist eine gute Idee. Kann man das Skript auch mit einer (hoffentlich nicht) belegten Funkt. Taste starten?

Bitte in einem separaten Thema im richtigen Forum nochmal fragen, das hat nichts mehr mit "Shell und Programmieren zu tun"

Zudem würde ich $Quelle und $Ziel beim Aufruf von rync in doppelte Anführungsstriche setzen.

Aber das Skript läuft.

Ja. Geht hier um z.B. Leerzeichen in $Quelle und $Ziel. Sprich: Wenn sich mal was ändert an den Pfaden, kann das Quoting hilfreich sein.

Gruß BillMaier

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4673

Wohnort: Berlin

@bueffel110: Welcher Präprozessor? Das Betriebssystem findet diese Zeile nur wenn es die erste Zeile ist.

bueffel110

(Themenstarter)

Anmeldungsdatum:
15. Dezember 2006

Beiträge: 291

Ich habe mich in dem Wort: Präprozessor geirrt. Aber das Skript läuft.

Der Interpreter finde durch "#!" an jeder Stelle ( in ersten Phase? ) und führt "/bin/bash <Skript-name>" aus. Ich habe es ausprobiert!

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4673

Wohnort: Berlin

@bueffel110: Welcher Interpreter? Welche erste Phase? Die She-Bang-Zeile wird definitiv nicht an jeder Stelle gefunden, sondern nur in der ersten Zeile.

„Aber das Skript läuft.“ ist auch kein wirklich gutes Argument gegen Verbesserungsvorschläge.

Antworten |