Scriptschnittstelle für Datenübertragungsjobs

LSF Data Manager-Administratoren stellen einen angepassten Datenübertragungsbefehl bereit, der durch den Parameter FILE_TRANSFER_CMD in lsf.datamanager angegeben wird, der von Datenübertragungsjobs verwendet wird.

Anforderungen des Datenübertragungsbefehls

  • Der Befehl muss zwei Argumente mit dem folgenden Format haben:
    [host_name:]abs_file_path
    Das erste Argument ist ein absoluter Pfad zur Position der Quellendatei und das zweite ein absoluter Pfad zum Ziel der Übertragung.
  • Der angegebene Befehl muss blockiert werden, bis die Übertragung erfolgreich abgeschlossen wurde oder ein Fehler auftritt.
  • Der Befehl muss zurückgegeben werden0Wenn erfolgreich, und ein Wert ungleich null, wenn ein Fehler auftritt.
  • Der Befehl muss von Benutzern über die Cluster-Datenübertragungsknoten ausführbar sein.
  • Der Befehl muss Pfaddeskriptoren mit oder ohne Hostnamen für jedes seiner beiden Argumente akzeptieren können. Der Standardbefehl scp erfüllt beispielsweise beide Anforderungen. Der Befehl cp ist nicht gültig, da er keinen Hostnamen akzeptieren kann.

Wenn der Befehl erfolgreich zurückgegeben wird, geht LSF Data Manager davon aus, dass die Übertragung fehlerfrei abgeschlossen wurde.

Der Standardübertragungsbefehl (/usr/bin/scp) erfüllt diese Anforderungen unter den folgenden Bedingungen:
  • Die Datenübertragungsknoten sind Linux -Standardhosts, auf denen scp implementiert ist.
  • Kennwortloses SSH ist für Benutzer vom Datenknoten zu den Datenquellen-und Zielhosts konfiguriert.
Wichtig: Wenn ein von LSF Data Manager übergebener Übertragungsjob fehlschlägt, wird er nicht wiederholt. Alle Jobs, die die Übertragung der Datendatei durch den fehlgeschlagenen Job anfordern, werden von LSF mit dem Exit-Code 125 abgebrochen.

Beispiel für ein Wrapper-Script für die Datenübertragung

Je nach verwendetem Übertragungstool können Sie ein Wrapper-Script implementieren, um Fehler bei der Datenübertragung zu beheben und die Ausfallsicherheit von Datenübertragungen zu erhöhen. Das folgende Beispiel-Wrapper-Script für den Befehl scp führt zwei Aktionen aus:
  • Die Übertragung bis zu fünf Mal wiederholen, bevor sie aufgibt, 10 Sekunden zwischen den Wiederholungen im Ruhemodus
  • Protokollieren Sie alle Fehlernachrichten, die vom Befehl scp ausgegeben werden, in der Datei /tmp/<transfer_jobid>.<host_name>.err auf dem Datenübertragungsknoten (E/A-Knoten), der den Übertragungsjob ausgeführt hat.
#!/bin/bash 
#
# Save the source, destination, and execution host
#
src=$1
dst=$2
host='hostname'

#
# File names for the error log and a temp file
#
errlog=/tmp/$LSB_JOBID.$host.err
tmplog=/tmp/$LSB_JOBID.tmp 
#
# Append the source and destination of the transfer to the error log
#
echo "SRC = $src" >> $errlog
echo "DST = $dst" >> $errlog 
#
# Try to do the transfer up to 5 times, sleeping 10 seconds in between
#
ntries=$((0))
done=$((0))
while [[ $(($ntries < 5)) == 1 && $(($done == 0)) == 1 ]]; do
    #
    # Increment the retry count
    #
    ntries=$(($ntries + 1))
    #
    # Run the transfer command and store its output in a temp file
    #
    scp $src $dst &> $tmplog
    #
    # Save the error code returned by the command
    #
    code=$?

    if [ $code == "0" ]; then

        #
        # Success!   Delete the error log and break out of the loop
        #
        rm $errlog
        done=$((1))

     else
        #
        # Failure :( Append the command output to the error log
        #

        echo "==== OUTPUT: (Attempt $ntries) ===================" >> $errlog
        cat $tmplog >> $errlog
    fi
    #
    # Sleep for 10 seconds before trying again
    #
    sleep 10
 done 

#
# Always delete the temp file
#
rm $tmplog
#
# Exit with the last return code provided by the transfer command
#
exit $code