Queue für copy Script

Dieses Thema im Forum "RedHat,Fedora & CentOS" wurde erstellt von DZane, 16.12.2013.

  1. #1 DZane, 16.12.2013
    Zuletzt bearbeitet: 16.12.2013
    DZane

    DZane Grünschnabel

    Dabei seit:
    16.12.2013
    Beiträge:
    1
    Zustimmungen:
    0
    Queue für copy Script (CentOS 3.5)

    Hallo liebe Community,

    ich habe folgende Frage an euch ...

    Hier mal die Anforderung und die derzeitige Konfiguration

    Anforderung:
    1. Eine Datei wird in einen "Watchfolder" geschrieben.
    2. Per incrond soll dann ein Script gestartet werden (nach Vollendung des Schreibvorgangs).
    3. Es soll eine VPN Verbindung aufgebaut werden.
    4. eine SAMBA Share soll gemounted werden.
    5. Das/Die Files sollen dann auf das Share kopiert werden.
    6. Nach dem Kopiervorgang soll das Share wieder geunmounted werden.
    7. Der VPN Tunnel soll wieder geschlossen werden.

    Die VPNC Verbindung soll nicht dauerhaft bestehen sondern nur auf bedarf aufgebaut und wieder abgebaut werden.


    Derzeitige Konfiguration:
    1. incrond checkt ob eine Datei in den "Watchfolder" geschrieben wurde.
    2. incroned startet das VPNC-Script.
    3. Script checkt ob VPNC bereits läuft (startet den Prozess gegebenenfalls).
    4. Script prüft ob die Gegenseite erreichbar ist (PING).
    5. Script prüft ob das Share bereist gemounted ist (mounted es gegebenenfalls).
    6. Script kopiert das File auf das Share.
    7. Script prüft die MD5 Summe beider Files (Source und Destination).
    8. Script entfernt das Share.
    9. Script beendet den VPNC Prozess.

    Hier das derzeitige Script:
    Code:
    #!/bin/sh
    
    #Erstellung der Logifle Variable
    LOGFILE="/var/log/vpnc/filetransfer.log"
    
    #Prüft ob VPNC läuft und startet den Dienst gegebenenfalls 
    if ( ps -ef | grep -v grep | grep -v rtvpnc_ondemand | grep -v less | grep vpnc > /dev/null ) ; then
        echo -n `date` >> $LOGFILE
        echo "  [INFO] VPNC has already been started " >> $LOGFILE
    else
        echo -n `date` >> $LOGFILE
        echo -n "  " >> $LOGFILE
        vpnc 2>&1 >> $LOGFILE
    fi
    
    #Überprüft per PING ob die Netapp auf seitens Moskau erreichbar ist
    if ( ping -c 2 xx.xx.xx.xx > /dev/null 2>&1 ) ; then
        echo -n `date` >> $LOGFILE
        echo "  [INFO] Netapp reachable" >> $LOGFILE
    else
        echo -n `date` >> $LOGFILE
        echo "  [ERROR] Netapp unreachable" >> $LOGFILE
        exit
    fi
    
    #Prüft ob das Share eingebunden ist
    if ( mount | grep /mnt/smb > /dev/null ) ; then
        echo -n `date` >> $LOGFILE
        echo "  [INFO]Samba share already mounted" >> $LOGFILE
    else
        x=$(mount -t cifs //xxxxxxx.xx/xxxxxxx/xxxxx /mnt/smb -o user=xxxx/xxxx,password=xxxx 2>&1)
        echo -n `date` >> $LOGFILE
        if [ -n "$x" ] ; then
            echo "  [ERROR] $x" >> $LOGFILE
        else
            echo "  [INFO] Samba share successfully mounted" >> $LOGFILE
        fi
    fi
    
    #Zieht sich die MD5 Summe der Datei aus Berlin
    md5berlin=$(md5sum $1/$2 | grep -o -m 1 '^[0-9a-f]*')
    
    #Zieht sich die Dateigröße
    filesize=$(du $1/$2 | grep -o -m 1 '^[0-9]*')
    
    #Beginn des Timestamps
    start=$(date +%s)
    
    #Kopiert die Datei nach Moskau
    echo -n `date` >> $LOGFILE
    echo -n "  " >> $LOGFILE
    /bin/cp -rf "$1/$2" /mnt/smb/ 2>> $LOGFILE && echo "  [INFO] File sucessfully copied" >> $LOGFILE
    
    #Ende des Timestamps
    stop=$(date +%s)
    
    #Berechnung der Übertragungszeit
    time=$(expr $stop - $start)
    min=$(expr $time / 60)
    sec=$(expr $time % 60)
    
    #asdasdasdqsa
    echo -n `date` >> $LOGFILE
    echo "  [INFO] The file '$2' with a size of $filesize KByte was copied in $min Min $sec s !" >> $LOGFILE
    
    #Zieht sich die MD5 Summer der Datei aus Moskau
    md5moscow=$(md5sum /mnt/smb/$2 | grep -o -m 1 '^[0-9a-f]*')
    
    #Ãœberprüft die Dateigröße auf Unstimmigkeiten
    echo -n `date` >> $LOGFILE
    if [ "$md5berlin" = "$md5moscow" ] ; then
        echo "  [INFO] Filesize is matching" >> $LOGFILE
    else
        echo "  [ERROR] Filesize is NOT matching - Berlin ($md5berlin) = Moscow ($md5moscow)" >> $LOGFILE
    fi
    
    #Das Share unmounten
    if (mount | grep /mnt/smb > /dev/null) ; then
        y="$(umount /mnt/smb 2>&1)"
            echo -n `date` >> $LOGFILE
        if [ -n "$y" ] ; then
            echo "  [ERROR] $y" >> $LOGFILE
        else
            echo "  [INFO] Samba share successfully unmounted" >> $LOGFILE
        fi
    fi
    
    #VPNC stoppen
    echo -n `date` >> $LOGFILE
    echo -n "  " >> $LOGFILE
    vpnc-disconnect 2>&1 >> $LOGFILE
    
    exit
    

    Das Script ist noch nicht wirklich optimiert und meine Frage bezieht sich wie im Titel beschrieben eher um das erstellen einer Queue für den Kopiervorgang.

    Derzeit ist der Fall ja so, das jedes mal wenn ein File geschrieben wurde das Script gestartet wird und das File kopiert wird.
    Mein Problem ist nun, das es auch mal vorkommen kann das mehrere Dateien zur gleichen/oder fast gleichen Zeit geschrieben werden und es daher zu Komplikationen kommen kann,
    da sich eventuell gerade ein File im Kopiervorgang befindet und das vorangehende Script die Verbindung wieder kappt da dort der Vorgang beendet wurde.

    derzeit habe ich folgende Idee um dies zu umgehen, nur weiß ich nicht ob es bessere Wege gibt dies zu umgehen.

    Ich würde jetzt dem incrond sagen das er jedes File (den Namen der Datei) aus dem Watchfolder in eine extra *.txt (Queue.txt oder so) schreibt (Zeilenweise) und diese dann vom Script wieder ausgelesen wird.
    Im Grunde soll also folgendes passieren:

    1. File wird in den Watchfolder geschrieben.
    2. Name der Datei wird in eine "queue.txt" geschrieben.
    3. Das Script läuft los und liest bei jedem Durchgang die queue.txt von neuem ein um prüft ob sich in den Zeilen weiter namen befinden.
    4. das Script kopiert die Datei auf das Share.
    5. War der Kopiervorgang erfolgreich soll der Name der Datei aus der Queue.txt gelöscht werden.
    6. Das script soll erneut prüfen ob sich noch weiter Dateien/Namen in der Queue.txt befinden und gegebenenfalls weiter kopieren.
    7. Ist die Queue.txt leer, soll das Script beendet werden.



    Ist das eine saubere und sinnvolle Lösung oder gibt es da bessere Methoden?


    Für Vorschläge und konstruktive Kritik wäre ich dankbar.

    Gruß

    DZane


    Edit:

    Das Script läuft dann später auf CentOS 3.5 (falls das wichtig sein sollte).
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Queue für copy Script

Die Seite wird geladen...

Queue für copy Script - Ähnliche Themen

  1. Icinga 1.9 mit Socket Queue und asynchroner Verarbeitung

    Icinga 1.9 mit Socket Queue und asynchroner Verarbeitung: Der Nagios-Fork Icinga ist in der Version 1.9 erschienen. Mit dieser Veröffentlichung feiert die Icinga-Gemeinde auch das vierte Jubiläum der...
  2. Posix Threads Kommunikation über Message Queues??

    Posix Threads Kommunikation über Message Queues??: Hallo Leute, ich hätte da mal eine Frage, bei der Suche hab ich nichts finden können, und zwar soll ich eine Kommunikation zwischen Threads über...
  3. [Last.fm Player] Queue löschen...

    [Last.fm Player] Queue löschen...: Hey, ich wollte mit dem Last.FM Player meine Tracks vom iPod scrobbeln, jetzt wollte der gute allerdings 3094 Tracks scrobbeln und hat mein...
  4. Postfix Mail-Queue Leeren / Mailenabled

    Postfix Mail-Queue Leeren / Mailenabled: Morgen, habe ein Problem mit unserem (sehr alten) Postfix Mailserver..... In der Warteschlange sind mehrer 10000 Mails die er einfach nicht...
  5. Drucker unter CUPS- keine Print Queue?

    Drucker unter CUPS- keine Print Queue?: Hallo, hätte da eine Verständnisfrage. Wenn ich einen Drucker über CUPS einrichte, der hier über lpd://meindrucker/lp2 angesprochen wird...