• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Scripts soll andere Scripts aufrufen und deren Beendigung abwarten

Guude! (wie man in Hessen grüßt)

Ich möchte ein paar Backup-Scripts automatisieren. Dazu soll das Script "backuploop.sh" per cronjob aufgerufen werden.

backuploop.sh:
Bash:
#!/bin/bash
for datei in /home/user/backupscripts/*.sh
do
   #skript ausführen und abwarten, bis fertiggestellt
done
/usr/sbin/shutdown
Im Verzeichnis "/home/user/backupscripts" liegen ein paar scripts, die alle abgearbeitet werden sollen. Unklar ist noch wieviele Scripts das mal werden, deswegen die Idee mit dem Loop. Die Reihenfolge der Abarbeitung ist irrelevant, wichtig ist jedoch, dass backuploop.sh für jedes aufgerufene Script dessen Beendigung abwartet (sonst käme der Shutdown ggf. zu früh).

Wegen meiner eklatanten Schwächen in der Bashscript-Programmierung brauche ich euren Beistand!
 

susejunky

Moderator
Teammitglied
Wegen meiner eklatanten Schwächen in der Bashscript-Programmierung brauche ich euren Beistand!
Hier findest Du die aktuelle bash-Dokumentation (siehe das Kapitel "Job Control").

Und wenn Du etwas tiefer in die Shell-Programmierung einsteigen willst:

Hier noch zwei Hinweise:
  • Wenn ein Programm Daten auf einen Datenträger schreibt (lokal oder über ein Netzwerk), dann werden diese Daten in den meisten Fällen zwischengespeichert, um die unterschiedlichen Arbeitsgeschwindigkeiten der involvierten Komponenten aus zu balancieren (z.B. "schnelle" NVMe zu "langsamer" HDD). Diese Zwischenspeicherung unterliegt in aller Regel der Kontrolle des Kernels. Das Ende eines Programms bedeutet nicht zwingend, dass die von ihm verarbeiteten Daten auch bereits vollständig am Ziel angelangt sind. Ein Abschalten des Rechners direkt nach Programmende kann zu unerwarteten Ergebnissen führen.
  • Wenn Du mit einem Betriebssystem arbeitest, das systemd nutzt, dann kannst Du systemd.timer anstelle von cron und systemctl isolate poweroff anstelle von /usr/sbin/shutdown verwenden.
 
Hallo Susejunky,

vielen Dank für die Infos. Shutdown bietet ja noch eine halbe Minute Galgenfrist (in Debian 13), bis der Stecker gezogen wird. Ich weiß, dass das auf jeden Fall reichen wird. Könnte auch trotzdem noch ein "sleep x" jedem aufgerufenen Script hinzufügen, um mehr Zeit zu gewinnen.

Die Links werde ich mir anschauen, aber ich wäre ehrlich gesagt an einer schnelleren Hilfe interessiert gewesen. Mit knapp über 60 muss man schon schauen, welche Vorhaben noch bis zum statistischen Ende zu schaffen sind. Die wichtigsten Fragen wären: Bei meinem o. g. Beispiel habe ich den Dateinamen dann in "$datei". Wie wird damit ein Script aufgerufen, auf dessen Ende gewartet wird und ggf.: müssen die aufgerufenen Scripts auf besondere Art beendet werden?
 
Hi EmmJay,

Den Effekt, den Susejunky beschrieben hat, kannst du mit dem Kommando "sync" verhindern.
Die Scripte werden sequentiell abgearbeitet, wenn das letzte Kommando eines Scripts sich beendet, wird auch das Script beendet. Keines dieser Scripte sollte einen Hintergrundprozess starten.
Was passiert bei Fehlern? Dein Beispiel sollte ein Fehlerhandling aufzeigen.
Ich würde sequentiell auch testen. Die Schleife und der Aufruf im Batch kommt erst ganz am Schluß.

Grüße, Bequimão
 
Oben