Bash Script, Log ausgabe friert ein.

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von rabadag, 03.03.2006.

  1. #1 rabadag, 03.03.2006
    Zuletzt bearbeitet: 18.03.2006
    rabadag

    rabadag Mitglied

    Dabei seit:
    21.05.2005
    Beiträge:
    30
    Zustimmungen:
    0
    Hallo Forum, hab da etwas seltsammes wo ich nicht weiter komme.

    Das Script selbst scheint einwandfrei zu funktioniren, nur wird die ausgabe in das logfile immer 5 min lang unterbrochen.

    Ich weis nicht wo mein Fehler sein könnte, das die logfile immer einfrieren?
    $PROGPATH ${d} 2>&1 > /var/log/new-${d}.log

    hier mal mein code.

    Code:
    #!/bin/bash
    PIDFILE=/var/run/car1.pid
    PIDFILE2=/var/run/car2.pid
    PIDFILE3=/var/run/new.pid
    PROGRAM=car.i386
    PROGPATH=/usr/local/etc/car1/car1.i386
    PROGPATH1=/usr/local/etc/car1/2.i386
    PROGPATHCS=/usr/local/etc/new/new.x86
    PROGCONF="spezial.conf"
    PROGDIR=/usr/local/etc/car1
    PROGDIRCS=/usr/local/etc/new/configs
    PROGARGS=""
    DESC="Programm1 configs"
    DESC1="Programm2 config"
    DESC2="New"
    ECHO=/bin/echo
    HEAD=/usr/bin/head
    KILL=/bin/kill
    CAT=/bin/cat
    
    if [ ! -x $ECHO ]; then
      exit 1
    fi
    
      if [ ! -x $HEAD ]; then
        $ECHO "*** $0: error: $HEAD is needed and was not found."
          exit 1
    fi
    
    if [ ! -x $KILL ]; then
        $ECHO "*** $0: error: kill is needed and was not found."
        exit 1
    fi
    	  
    if [ -z $1 ]; then
        $ECHO "USAGE: $0 <stop | start>"
        exit 1
    fi
    	      
    	      
    if [ ! -x $PROGPATH ]; then
        echo "$PROGPATH does not exist or is not executable."
        exit 1
    fi
    
     
    		  
    case $1 in
            start)
    	
              if [ -r $PIDFILE ]; then
                PID=$($CAT $PIDFILE)
    	    			PID2=$($CAT $PIDFILE2)
    	    			PID3=$($CAT $PIDFILE3)
    	 
                if $($KILL -s CHLD $PID 2>&1 > /dev/null)
    	    then
                  echo "$DESC läuft bereits! run $0 stop und danach start"
    		
    		if $($KILL -s CHLD $PID2 2>&1 > /dev/null)
    	    then
                echo "$DESC1 läuft bereits! run $0 stop und danach start"      
    		fi
    
    		if $($KILL -s CHLD $PID3 2>&1 > /dev/null)
    	    then
                echo "$DESC3 läuft bereits! run $0 stop und danach start"      
    		fi
    
    	exit 1
    
                fi
    
              else
                $ECHO "Starte $DESC... und $DESC1 "
    		cd $PROGDIR
    		for d in `ls -a *.cfg`; do
        		$PROGPATH  ${d} 2>&1 > /var/log/car-${d}.log
    		done
    		
    		cd $PROGDIRCS
    		for e in `ls -a *.xml`; do
        		$PROGPATHCS -c $PROGDIRCS/${e} 2>&1 > /var/log/new-${e}.log
    		done
    		
    		$PROGPATH1  $PROGCONF 2>&1 > /var/log/car-$PROGCONF.log
    		
    		ps aux | grep car1.i386 | grep -v grep | awk '{print $2}' > $PIDFILE;
    		ps aux | grep car2.i386 | grep -v grep | awk '{print $2}' > $PIDFILE2;
    		ps aux | grep new.i386 | grep -v grep | awk '{print $2}' > PIDFILE3;
    		
    		$ECHO "$DESC...${d} und $DESC2 ${e} sowie $DESC1 erfolgreich gestartet"
    	fi        
            ;;
            stop)
              if [ -r $PIDFILE ]; then
                PID=$($CAT $PIDFILE)
                PID2=$($CAT $PIDFILE2)
                PID3=$($CAT $PIDFILE3)
    		
    	    $ECHO -n "Beende $DESC..."
     
                $KILL -s TERM $PID 2>&1 > /dev/null
     
                rm -f $PIDFILE 2>&1 > /dev/null
                
                $ECHO "$DESC.. erfogreich beendet Fertig."
    
                $ECHO -n "Beende $DESC1..."
     
                $KILL -s TERM $PID2 2>&1 > /dev/null
     
                rm -f $PIDFILE2 2>&1 > /dev/null
                
                $ECHO "$DESC1 erfogreich beendet Fertig."
    
      	    $ECHO -n "Beende $DESC2..."
     
                $KILL -s TERM $PID3 2>&1 > /dev/null
     
                rm -f $PIDFILE3 2>&1 > /dev/null
                
                $ECHO "$DESC2 erfogreich beendet Fertig."
    
              else
                echo "$DESC.. $DESC1..$DESC2 Sind nicht gestartet"
                exit 1
              fi
          ;;
    
    *)
    
          $ECHO "USAGE: $0 <stop | start>"   
                exit 1
            ;;
    
    
    esac
     
    unset PIDFILE PROGRAM PROGPATH PROGARGS DESC ECHO HEAD KILL
     
    exit 0
     
    #EOF
    ;;
    
    
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 rabadag, 18.03.2006
    rabadag

    rabadag Mitglied

    Dabei seit:
    21.05.2005
    Beiträge:
    30
    Zustimmungen:
    0
    warum hilft den mir nimand? keiner ne idee
     
  4. #3 supersucker, 18.03.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    also im script sehe ich nichts was damit zu tun haben könnte.

    aber hab ich das richtig verstanden, das schreiben in das logfile erfolgt alle 5 minuten?

    wenn ja, tippe ich mal darauf das der stdout und stderr zeichenbuffer halt immer erst ab einer bestimmten grösse "geflusht" wird, also in das logfile geschrieben wird.

    wie man das unter der bash abschaltet kann ich dir nicht sagen und hab jetzt auch auf die schnelle nix gefunden.

    unter perl würde das so gehen:

    Code:
    $| = 1
    unter der bash wird das ähnlich einfach sein. such halt mal. bzw. kann einer der mods hier bestimmt mehr dazu sagen.

    und sei mal nicht so ungeduldig. wir sind schließlich kein bezahlter helpdesk hier.
     
  5. #4 rabadag, 18.03.2006
    rabadag

    rabadag Mitglied

    Dabei seit:
    21.05.2005
    Beiträge:
    30
    Zustimmungen:
    0
    Hallo supersucker

    Fast...

    Das logfile wird zwar geschriben bleibt dan stehen und mach 4 -5 min pause.
    gehts weiter.

    Einfach gesagt:
    es werden etwa 20 Zeilen ins log geschrieben.
    Dnach folgt eine Pause bis zu 5 Min.
    Dann widerum ck 20 zeilen.

    immer so weiter.

    So sind keine Eintrage wärend den Pausen vorhanden die 4 - 5 Minuten Pause sind nirgens im log niedergeschrieben, als würde sich der logsys aufhängen.

    Andere logs weisen diesen Fehler nicht auf.

    Wenn ich das Programm manuel normal in der console starte und die ausgabe auf den ssh client habe sind keine Pausen sichtbar.

    Ich denke das es mit der schlaufe zu tun hat..

    Code:
           
    PRODIR=/usr/local/etc/prog
    PROGPATH=/usr/local/etc/prog/execute.i386
    cd $PROGDIR
    		for d in `ls -a *.cfg`; do
        		$PROGPATH  ${d} 2>&1 > /var/log/car-${d}.log
    		done
    
    wenn ich es manuel starten würde, dan so.


    Code:
           
     cd /usr/local/etc/prog
     /usr/local/etc/prog/execute.i386 /usr/local/etc/prog/config.cfg 2>&1 > /var/log/car-logfile.log
    
    Das müste ich dan aber 5 mal manuel starten, da ja 5 Configs vorligen. deshalb die schleife..
     
  6. #5 Wolfgang, 19.03.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Ich kann hier keinen offensichtlichen Fehler erkennen.
    Eventuell solltest du das mal mit set -x durchlaufen lassen und dir die einzelnen Variablen anzeigen lassen.
    Leider kenne ich weder dein genaues Ziel, noch die Umgebung.
    Im Zweifelsfall, könntest du dich mittels echo an diversen Stellen durchhangeln.
    So debugge ich wenigstens diverse Scripte mit unerwarteten Ergebnissen.

    Gruß Wolfgang
     
  7. #6 rabadag, 15.04.2006
    rabadag

    rabadag Mitglied

    Dabei seit:
    21.05.2005
    Beiträge:
    30
    Zustimmungen:
    0
    Hallo Wolfgang

    Ich war mal kurz weg "Spital Aufenthalt" naja nun wider online.

    was meinst du mit set -x
    und wo muss ich das den einsetzen?

    Ich denke es igt nicht an dem script, den auch eine manuelle
    umleitung in der console mittels.
    /usr/local/etc/program1.i386 config1.cfg >> /var/log/programm1.log

    Macht das selbe. Auch wider 4-5 minuten keine Einträge im Log.

    Die ausgabe auf der console weist diesen fehler nicht auf.
     
  8. #7 Schlaubi_fi.de, 16.04.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Huhu rabadag,

    hoffentlich bist wieder gesund..?!
    Also mit 'set -x' kannst du debuggen und ausschalten kannst du es mit 'set +x'.
    Du kannst es an eine beliebige Stelle in deinem Code schreiben. Oder sogar auch in die She-Bang Zeile ganz am Anfang...dann aber ohne set, also so:
    Code:
    # !/bin/bash -x
    Hmm...vielleicht würde hier eine FIFO helfen???
     
  9. #8 rabadag, 19.04.2006
    Zuletzt bearbeitet: 19.04.2006
    rabadag

    rabadag Mitglied

    Dabei seit:
    21.05.2005
    Beiträge:
    30
    Zustimmungen:
    0
    :brav: Ja bin wider gesund. Mein aufenthalt im Spital war durch ein sehr starken Hexenschuss unvermeidbar. Lag bei mir Zuhause auf dem Boden und konnte mich keinen milimeter mer bewegen.

    Aber jetz is alles wider ok.



    OK danke für den tip werd ich gleich mal testen.

    PS: Ich hab wohl noch ne info vergessen, das Programm das gestartet wird läuft 24 Std. duch also ist das logfile immer in use.

    dachte es könnte noch wichtig sein.



    hmm..
    Ergebnis:
    also das loggen hat nichts gebracht, keine fehler oder errors.
    dan hab ich mal versucht anstelle von

    $PROGPATH1 $PROGCONF 2>&1 > /var/log/car-$PROGCONF.log

    mit
    $PROGPATH1 $PROGCONF

    und sihe da alles ist auf der console sichtbar keine unterbrüche..

    es muss irgenwas mit dem schreiben ins logfile schifgehen aber was..
    kann ich das eventuel mit tee oder teil greppen und dan in ein log schreiben?
     
  10. #9 ninguno, 20.04.2006
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    das ist imho das normale stdio buffering in der shell, output auf die console ist line buffered, daher siehst du das sofort, output in einen file ist block buffered
     
  11. #10 rabadag, 20.04.2006
    rabadag

    rabadag Mitglied

    Dabei seit:
    21.05.2005
    Beiträge:
    30
    Zustimmungen:
    0
    danke für die Antwort, aber das hilft mir nicht weiter.

    Wie grige ich das hin das ich alles im logfile habe und nicht nur bruchstüke.
     
  12. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  13. #11 Schlaubi_fi.de, 20.04.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Du meinst es fehlen devinitiv Zeilen? Hast Du denn schon mal versucht, wie du schon sagtest, mit tee die Ausgabe auf stdout und zusätzlich ins Logfile umzuleiten, um dann die beiden Ausgaben zu vergleichen, ob denn wirklich Zeilen fehlen??

    btw: könntest Du bitte etwas mehr auf Deine Rechtschreibung achten? Danke.
     
  14. #12 rabadag, 20.04.2006
    Zuletzt bearbeitet: 20.04.2006
    rabadag

    rabadag Mitglied

    Dabei seit:
    21.05.2005
    Beiträge:
    30
    Zustimmungen:
    0
    Ja hab ich schon versucht, mit selben Ergebnis.
    $PROGPATH1 $PROGCONF 2>&1 > | tee -a /var/log/car-$PROGCONF.log

    hat alles nichts gebracht..
     
Thema:

Bash Script, Log ausgabe friert ein.

Die Seite wird geladen...

Bash Script, Log ausgabe friert ein. - Ähnliche Themen

  1. Bräuchte Hilfe bei Backupscript mittels Bash und cronjob

    Bräuchte Hilfe bei Backupscript mittels Bash und cronjob: Es soll für bestimmte Ordner Archivierung aller Dateien(Logfiles), die älter als 30 Tage sind machen. Am besten einmal täglich nachts irgendwann....
  2. Bashscript aus Debian6 läuft nicht auf Debian7

    Bashscript aus Debian6 läuft nicht auf Debian7: Hallo an alle, nachdem ich ein Skript von squeeze auf wheezy kopiert habe und ausführte, erschienen gleich wilde Fehlermeldungen, nach denen ich...
  3. Bash enscript mit mehreren Ordnern und Dateien

    Bash enscript mit mehreren Ordnern und Dateien: Hallo, Ich habe eine Ordner mit Unterordner in dem sich je mehrere verschiedenbenannte .java-Dateien befinden. Der Code: enscript -2rG...
  4. USB Geräte per Bash Script resetten (Gerät hängt sich öfter mal auf)

    USB Geräte per Bash Script resetten (Gerät hängt sich öfter mal auf): Hallo. Ich habe eine USB Netzwerkkarte an einem Linux Router System. (LogiLink mit MosChio MCS 7830). OS ist Debian 6. System ist ein MSI...
  5. Hilfe bei bash - Shellscript gesucht: zusammengehörende Strings in Konfigdatei

    Hilfe bei bash - Shellscript gesucht: zusammengehörende Strings in Konfigdatei: Hallo zusammen, bin leider noch kein Skript-Guru, das folgende Problem wird wohl sehr in die Tiefen von substr, split, regulären Ausdrücken...