Ausgabe: Nur erste Zeile

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von infinity331, 23.03.2011.

  1. #1 infinity331, 23.03.2011
    infinity331

    infinity331 Jungspund

    Dabei seit:
    08.03.2011
    Beiträge:
    14
    Zustimmungen:
    0
    Hallo Zusammen,

    ich habe ein Skript geschrieben, welches mit mit Hilfe des RRDtools einige Daten grafisch ausgibt. Das Problem ist allerdings, dass ich eine sh-Datei ausführe und diese dann nach einigen anderen Befehlen wieder gestopt werden soll.

    Das Ausführen sieht folgendermaßen aus:
    Code:
    sh /root/scripts/rrdtool/cronpluto.sh &
    Jetzt benötige ich aber die PID um die Datei wieder zu stoppen, welche ich folgendermaßen raushole:
    Code:
    PID=$(ps -ax | grep cronpluto |awk '{print $1}')
    kill PID
    An dieser Stelle werden aber immer 2 PIDs ausgegeben, eine welche nicht "killbar" ist. Ich möchte daher nur die erste Zeile ausgegeben haben, damit ich die korrekte PID killen kann und die Datei somit beendet ist.

    Ich hoffe ihr könnt mir weiterhelfen.

    Gruß,
    infinity331


    PS: Using CentOS.
     
  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 bytepool, 23.03.2011
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    wenn das Starten und Stoppen innerhalb des selben Skriptes passieren soll, kannst du doch besser einfach den job killen (kill %1)?

    Z.B.:
    Code:
    #!/bin/bash
    # while-true.sh
    
    while true; do
        echo foo >> foo.bar
    done
    
    Code:
    #!/bin/bash
    # end-while.sh
    
    echo "Start while loop in job 1."
    ./while-true.sh &
    echo "Kill job 1."
    kill %1
    echo "Should be done now."
    
    Oder passiert das Starten und Stoppen in unterschiedlichen sub-shells?

    mfg,
    bytepool
     
  4. #3 floyd62, 24.03.2011
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hi,

    du bekommst wohl 2 PIDs, weil bei
    Code:
    PID=$(ps -ax | grep cronpluto |awk '{print $1}')
    
    der 'grep'-Befehl selbst immer mit erwischt wird, dieser beim 'kill' danach aber natürlich bereits beendet ist. Nimm doch stattdessen einfach
    Code:
    PID=$!
    
    also die PID des zuletzt gestarteten Background-Prozesses. Die kannst du ja ggf. auch in einem Temp-File zwischenspeichern, wenn der 'kill' etwa aus einem anderen Skript erfolgen soll.

    NB: davon, beim 'grep' z.B. mit 'head -1' die erste Zeile rauszuholen, würde ich abraten: m.E. gibt es keine Garantie dafür, dass die Prozesse wirklich immer in der dafür notwendigen Reihenfolge aufgelistet werden.

    Gruss, A.
     
  5. NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    Wenn es denn unbedingt mit ps/grep sein soll.

    Code:
    PID=$(ps -ax | grep cronpluto | grep -v grep |awk '{print $1}')
    
     
  6. #5 floyd62, 24.03.2011
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    ... und wenn's auf keinen Fall '$!' sein soll, evtl auch
    Code:
    PID=$(ps -ax | grep [c]ronpluto | awk '{ print $1 }')
    
    (damit fliegt der grep-Prozess schon mal selber raus), oder gleich ganz ohne grep (awk kann das ja auch alles)
    Code:
    PID=$(ps -ax | awk '/[c]ronpluto/ { print $1 }')
    
    ... das gibt dann nur noch Probleme, wenn gleichzeitig ein cronplutoXXX-Prozess aktiv ist, oder jemand mit dem Editor an einer cronpluto-Datei rumschraubt.

    ;)
    A.
     
  7. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.053
    Zustimmungen:
    8
    gibt es einen Grund, daß hier niemand
    Code:
    pidof
    verwendet?
     
  8. #7 infinity331, 20.05.2011
    infinity331

    infinity331 Jungspund

    Dabei seit:
    08.03.2011
    Beiträge:
    14
    Zustimmungen:
    0
    Danke, vielmals. Ich habe es mit der Lösung von floyd62 umgesetzt und funktioniert soweit auch ganz gut.

    Hätte da nun doch noch eine Frage. Gibt es eine Möglichkeit die PID beim Ausführen eines Shell-Skripts durch ein anderes Skript direkt mitzulesen und zu speichern ohne erstmal in der ps - Ausgabe zu suchen?
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. sinn3r

    sinn3r Law & Order
    Moderator

    Dabei seit:
    28.12.2006
    Beiträge:
    2.764
    Zustimmungen:
    0
    Ort:
    Wentorf
    Du könntest vom ersten Skript ein PID-File anlegen lassen, dass das andere Skript dann ausliest.
     
  11. #9 infinity331, 20.05.2011
    infinity331

    infinity331 Jungspund

    Dabei seit:
    08.03.2011
    Beiträge:
    14
    Zustimmungen:
    0
    Jo, das habe ich mir so gedacht, nur war der Kern der Frage, wie dies geht. Aber habe da nun eine Lösung gefunden.
    Ich speicher die PID mithilfe der Konstante $$ .
     
Thema:

Ausgabe: Nur erste Zeile

Die Seite wird geladen...

Ausgabe: Nur erste Zeile - Ähnliche Themen

  1. Kurztipp: Unerwünschte grep-Ausgaben vermeiden

    Kurztipp: Unerwünschte grep-Ausgaben vermeiden: Selbst aus altbekannten Programmen kann man oft noch einiges mehr herausholen - man muss sich nur einmal gründlich mit ihnen auseinandersetzen....
  2. Ausgabe von mkdir -p wegwerfen

    Ausgabe von mkdir -p wegwerfen: Hallo, ich stehe gerade auf den schlauch. in meinen BASH Script lege ich mit mkdir -p ein verzeichnis an. Das Script gibt dann immer auf der...
  3. Unix Shell echo/ausgabe solange Bedingung ...

    Unix Shell echo/ausgabe solange Bedingung ...: Hallo liebe Unix User, da ich relativ neu bin, was Linux / Unix angeht stehe ich gerade komplett auf dem Schlauch! Problem: Aus mehreren...
  4. »Einführung in Tcl/Tk« in neuer Ausgabe

    »Einführung in Tcl/Tk« in neuer Ausgabe: Das Buch »Einführung in Tcl/Tk« wendet sich an Anfänger, die die Programmiersprache Tcl/Tk erlernen wollen. Der Titel kann kostenlos für die...
  5. PHP 6 oder 7: Debatte über die Versionierung der nächsten Ausgabe von PHP

    PHP 6 oder 7: Debatte über die Versionierung der nächsten Ausgabe von PHP: In der Community der Scriptsprache PHP, die zur Erstellung dynamischer Webseiten und Webanwendungen dient, wird gerade kontrovers diskutiert,...