Batch-Job zwischen Dateien unterbrechen

Batch-Job zwischen Dateien unterbrechen

Ich muss meinen Bash-Batchjob (5,1 KB Dateien direkt komprimieren) so einrichten, dass, wenn ich den Job stoppen/fortsetzen muss, dieser wartet, bis er sich „zwischen“ Dateien befindet (gerade eine beendet und noch keine andere gestartet hat).

Meine Komprimierung würde so aussehen, pigz -9 -- rsnc*wenn alles auf einmal ausgeführt würde, und ich dachte an so etwas wie:

ls rsnc* | while read file 
  do pigz -9 -- $file
  if [ -f .intr ]
    then break
  fi
done

Ist das ein verlässliches Mittel, um mein Ziel zu erreichen? Gibt es einen besseren Weg?

Antwort1

Du kannst trap [1],[2] das Ctrl+ CSignal, das INT Signal und waitfür die Beendigung jedes Prozesses.

#!/bin/bash

trap ctrl_c INT

function ctrl_c() {
        wait   # wait for the end of all child processes    
        exit   # <<--- put here your exit code exit 1, ... 
}

shopt -s nullglob
for f in rsnc*
do
    pigz -9 -- $file &   # Execute in background
    wait  $!             # Wait for the end of the last command 
done

Notiz
Es gibt viele Möglichkeiten, alle Dateien in einem Verzeichnis zu durchlaufen [3] , aber es ist immerbesser vermeiden, die Ausgabe zu analysieren vonls [4] .

Verweise

verwandte Informationen