Python Script - Crontab

  • Danke , darauf hat mich ruedigerp auch schon gebracht . :)

    Allerdings scheint irgendetwas mit der Abfrage die prüfen soll ob das Script schon läuft nicht zu stimmen , das Script (also die .sh datei) gibt immer zurück dass das PERL script nicht läuft obwohl es schon läuft ... warum? :denker:

  • Zentris


    Ich dachte deine Glaskugel kann wenigstens eine Seite zurück blättern ... :auslachen: :P

    Dann wüsstest du dass es sich um dieses Script handelt :

    Bash
    #!/bin/bash
    lsof -p $(cat /var/run/tollesPerlScript.pid) > /dev/null; 
    LUPPT=$?; 
    if [ "$LUPPT" -eq "0" ]; 
    then 
      echo "luppt"; 
    else 
      echo "ist abgekackt. Wird neugestartet"; 
      /usr/local/bin/DeintollesPerlScript.pl
    fi

    Firmware also Betriebssystem ist Raspbian ? [/code]

  • ne, ne, Kugel frisch geputzt...

    Aber ich kenn ja meine Pappenheimer: :lol: Am Script gepusselt.... usw. :thumbs1:

    Bash
    #!/bin/bash
    lsof -p $(cat /home/pi/tscript.pid) > /dev/null
    LUPPT=$?
    if [ "$LUPPT" == "0" ] ;
    then
      echo "luppt"
    else
      echo "ist abgekackt. Wird neugestartet"
      /home/pi/tscript.sh &
    fi

    Siehst du den Unterschied?

    Ich habe das gerade auf meiner Kiste durchgetestet... läuft...

    Das tscript.sh :

    Bash
    #!/bin/bash
    echo `echo $$` > /home/pi/tscript.pid
    while [ 1 ] ; do echo `date` ; sleep 2; done
  • Also ich kann beide Scripte nachvollziehen , welches der beiden ist denn jetzt das das ich nehmen soll ? :blush: :denker:

    Script Nummer 2:

    Bash
    #!/bin/bash
    echo `echo $$` > /home/pi/tscript.pid
    while [ 1 ] ; do echo `date` ; sleep 2; done

    verstehe ich nicht so ganz ...

    Tut mir leid , ist zu spät um zu denken :^^:

    Ich würde doch niemals an einem Script rumbasteln ... :geek:

    Bin halt noch neu was Linux und Co. angeht kenne mich nur mit PHP , HTML , CSS und PERL aus , gegebenenfalls noch etwas Java und Python , aber das wars dann :D

    Achja , Icon kommt jetzt auch noch hinzu :bravo2:

    Einmal editiert, zuletzt von hechtfischen (24. April 2014 um 23:23)

  • och manno =(
    das untere Script ist doch nur ein Demo-Script... und das Obere ist soweit angepasst, dass es mit dem Unteren läuft.
    Ich musste das Ganze ja irgendwie testen, bevor ich dir hier Unsinn "verkaufe"...
    Damit kannst du auch völlig gefahrfrei rumspielen.. und lernen.
    :fies:

    Also langsam:
    Der Fehler in dem Original-Script ist der Vergleich in Zeile 4, den musst du in deinem Script korrigieren.
    Weiterhin ist das "&" beim Befehlsaufruf notwendig, um den Prozess, der durch das Script angestossen wird, weiter laufen zu lassen, auch wenn des Script abgelaufen ist und sich beendet.

    Dann kannst du an so einigen Stellen die Semikolons weglassen, so wie bei mir, aber das ist eher was für Puristen, notwendig sind die nicht... :thumbs1:

  • Danke soweit :D

    Wieder was gelernt :geek:

    Ich werde das dann morgen ausprobieren :shy:

    Bis dahin ! Gute Nacht :fies:

  • Fehlanzeige , das Shell script gibt nach wie vor zurück dass das Perl script angeblich abgeschmiert sei , was es aber nicht ist ?? :denker:

  • Das mache ich doch glatt:

    Das script von Zentris:

    Bash
    #!/bin/bash
    lsof -p $(cat /home/pi/server.pid) > /dev/null
    LUPPT=$?
    if [ "$LUPPT" == "0" ] ;
    then
      echo "luppt"
    else
      echo "ist abgekackt. Wird neugestartet"
      /home/pi/server.pl &
    fi

    Gibt immer zurück dass das Script nicht läuft (obwohl es läuft und die pid datei nicht leer ist )

    Und hier das andere Script mit komplett identischem ergebnis:

    Bash
    #!/bin/bash
    lsof -p $(cat /var/run/tollesPerlScript.pid) > /dev/null; 
    LUPPT=$?; 
    if [ "$LUPPT" -eq "0" ]; 
    then 
      echo "luppt"; 
    else 
      echo "ist abgekackt. Wird neugestartet"; 
      /usr/local/bin/DeintollesPerlScript.pl
    fi

    Beide wurden testweise einmal in der .sh datei unter

    Code
    /usr/local/bin/server.sh

    gespeichert und per Terminal gestartet ... gleiches ergebins... :s

  • So, ich habe mich jetzt selbst mal mit Shell beschäftigt und folgendes Script geschrieben:

    Und was soll ich sagen ? Funktioniert :bravo2:

    Danke an alle die mir geholfen haben :danke_ATDE:

  • Kann ich so nicht stehen lassen:
    Meine Scripte funktionieren, definitiv.

    Der Fehler im "Original"Script ist die unzulässige Verwendung von "-eq" beim if - Vergleich

    Dein Script (Einrückungen helfen der Übersichtlichkeit!) wirft die Frage auf, was für eine Datei du eigendlich abfragst, da scheint es keine Klarheit zu geben:

    Code
    if [ -e /var/run/Server.pid ]
       lsof -p $(cat /home/pi/server.pid) > /dev/null

    Oben fragst du das Vorhandensein einer Datei unter [font="Courier"]/var/run[/font] ab, die mit "großem" "S" beginnt (die Abfrage an sich ist überflüssig, da bei "Nichtvorhandensein" des Files lsof einen Rückgabewert != "0" zurück gibt), holst dann aber den Inhalt aus einem File, welches im Home-Verzeichnis des Users "pi" liegt und mit einem kleinen "s" beginnt. :s

    Fraglich ist jetzt, in welches File du eigendlich die PID schreibst. Ich *schau in die Glaskugel* und da wispert mir die Fee "ins andere" in mein Ohr... :lol:

    Wenn dein Code schon immer so "ungenau" war, wundert mich es mich nicht...

    Sry für meine Direktheit,
    aber da die derzeitige Generation von Computern (noch) strunzblöd ist, muss man denen alles haarklein und ganz genau hinlegen, sonst machen die was anderes, als man denkt. =(

    Aber +++ dafür, dass du dich mit der Shell beschäftigt hast :thumbs1:

  • Hallo Zentris :lol:

    Also folgendes:
    Als ich dein Script probiert hatte erhielt ich immer die Aussage zurück dass das PERL Script nicht laufen würde und versucht würde es neu zu starten .

    Anschließend habe ich mal bei deinem Script , bei dem Vergleich in Zeile 4, die "0" durch eine "1" ersetzt und siehe da , es hat funktioniert .

    Bash
    #!/bin/bash
     lsof -p $(cat /home/pi/server.pid) > /dev/null
     LUPPT=$?
     if [ "$LUPPT" == "1" ] ;
     then
       echo "luppt"
     else
       echo "ist abgekackt. Wird neugestartet"
       /home/pi/server.pl &
     fi

    So , dann habe ich den Pi neu gebootet und wollte dann das Script manuell über die Console per .sh dateo starten , das ging aber nicht da ich die Fehlermeldung zurück erhielt dass die Datei

    Code
    server.pid

    nicht existieren würde , was ja auch logisch ist da ich das Script noch nicht gestartet hatte , folglich habe ich noch eine Abfrage eingebaut die überprüfen soll ob das pid File schon existiert , sprich ob das Script schon einmal gestartet wurde . :thumbs1:[/align]

    Und richtig muss es so heißen:

    Abgesehen davon muss ich zugeben da einiges vergessen hatte anzupassen in meinem Post #51 , sorry !
    Meine Tastatur schreibt die Wörter leider immer von alleine Gross :blush: :mad_GREEN:

    Einmal editiert, zuletzt von hechtfischen (26. April 2014 um 10:36)


  • Als ich dein Script probiert hatte erhielt ich immer die Aussage zurück dass das PERL Script nicht laufen würde und versucht würde es neu zu starten .

    Anschließend habe ich mal bei deinem Script , bei dem Vergleich in Zeile 4, die "0" durch eine "1" ersetzt und siehe da , es hat funktioniert .

    In meinem Script ist kein perl drin, es ruft auch kein perl script auf. Ich weiss nicht, was du da gemacht machst, aber es war auf jeden Fall nicht korrekt.

    Weiter:
    Das Kommando "[font="Courier"]lsof[/font]" gibt nur im Erfolgsfall (so wie alle UNIX-Kommandos) eine "0" zurück.
    Die konkrete Abfrage bedeute also:
    Gib die Prozessinstanzen des folgenden Prozesses aus <Gib den Inhalt des Files xyz.pid aus>

    Die bash ersetzt den <> Teil der Abfrage durch den Inhalt des Files und lsof wird ausgeführt.
    Wenn das File nicht da ist, erhält lsof keinen Wert ==> Rückgabewert != "0"
    Wenn das File da ist, aber eine PID enthält, wofür es keine Prozessinstanzen gibt ==> Rückgabewert != "0"
    Wenn das File da ist und eine PID enthält, wofür es (mindestens) eine Prozessinstanz gibt ==> Rückgabewert == "0"

    Was du da machst, widerspricht der Logig, wie solche Kommandos und Scripte arbeiten.
    Wie schon gesagt, das Abfragen der Existenz des pif-Files ist überflüssig.


    Abgesehen davon muss ich zugeben da einiges vergessen hatte anzupassen in meinem Post #51 , sorry !
    Meine Tastatur schreibt die Wörter leider immer von alleine Gross :blush: :mad_GREEN:

    Falls das Letzte ernst gemeint ist, solltest du dringend den Editor wechseln.
    Ich und viele Andere verwenden grundsätzlich die Kommandozeile und dort "nano", "vi" oder "vim" (gibt noch mehr, aber die haben einen höheren Lernaufwand).

    Alles andere ist (von mir) schon geschrieben, irgendwas stimmt da nicht, aber was solls...

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!