Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
test auf " "

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Gekegenheits-Scripter
Gast





BeitragVerfasst am: 27. März 2007 12:28   Titel: test auf " "

Hallo Leute,

In einem erschaffenen init.s-start/stop-script habe ich die Prozessnummer des zu steuernden Programmes herausgeschnitten
und möchte diese auswerten.

Mit -gt, -lt, -eq geht das nicht, weil wenn das Programm nicht läuft diese Auswertung dann leer bleibt und derTest über
den Datentyp nichtnumerisch meckert.

Mit folgender Konstruktion geht das.
Code:
if [ $PRGID -a " " ]

Aber ...
... der Script-Name muss anders als der Programm-Name lauten!
... die Logik ist genau anders herum, als ich mir das vorstelle:
Meine Vorstellung: leere Variable $PRGID UND Leerstelle wahr, dann ..., aber es ist genau dann nicht Sad

Code:

PRGID=`ps -ef|grep dnrd|grep -v grep|tr " " ":"|tr -s :|cut -f2 -d:`

   status)
        if [ $PRGID -a " " ]
          then
          echo "Programm-ID ist $PRGID"
          else
          echo "Programm wurde gestoppt"
        fi
        ;;


Seltsam oder erklärbar?
Benenne ich den Aufruf geauso wie das Programm, auch dnrd, dann
Code:
 ./dnrd status
./dnrd: line 33: [: too many arguments
Programm wurde gestoppt

=LÜGE

Viele Grüße
Joe
 

sumsi
Gast





BeitragVerfasst am: 27. März 2007 19:18   Titel: eine Lösung

N'abend,

habe dafür folgende Lösung gefunden:

Vermute, es werden während der Scriptabarbeitung kurzfristig Prozesse geboren, die die selbe Bezeichnung (Programm-Name) beinhalten.

1. Ersetze Programm-Name dnrb durch vollständigen Pfad.
2. Damit keine oder Prozess-ID NNNN durch test -gt ohne Fehler ausgewertet werden kann, addiere den Wert mit "0":

Code:

let PRGID=$(ps ax|grep "/usr/local/sbin/dnrd"|grep -v grep|cut -d" " -f2)+0

dann geht auch
Code:

if [ $PRGID -gt 0 ]
          then
          echo "2. Programm-ID ist $PRGID"
          else
          echo "Programm wurde gestoppt"
fi


bye sumsi
 

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 28. März 2007 10:46   Titel:

Warum so kompliziert?

  1. Wenn wir vom dnrd reden, dessen Docs unter http://dnrd.sourceforge.net/docs.php liegen, dann schreibt er seine eigene PID in die Datei /var/run/dnrd.pid. Also einfach auf Existenz der Datei testen - keine da, kein Daemon. Ist die Datei vorhanden, auslesen und nach der PID fahnden: ps -p `cat /var/run/dnrd.pid`. Kriegt man keinen Output, ist kein Daemon vorhanden.
  2. Sollte es ein anderer dnrd sein, halt ich trotzdem die Vorgehensweise für falsch. Merke Dir doch einfach beim Starten des Daemon seine PID von Hand in der /var/run/dnrd.pid - dafür gibt es entsprechende Tools, oder man verwendet einen Vorschlag wie von Sumsi. Damit ist das Problem auf den vorhergehenden Punkt zurückgeführt.
  3. Sumsi hat zwar Deine Pipeline verändert, aber... wie soll ich sagen... schön ist die immer noch nicht! Smile Anstelle 1000er Prozesse für nix & wieder nix mal kurz zum awk greifen:
    Code:
    ps -ef | awk '$8 == "/usr/sbin/dnrd" {print $2}'
    awk läuft über alle Zeilen, die ihm das ps-Kommando liefert. Wenn die Bedingung "Achtes Feld soll gleich /usr/sbin/dnrd sein" greift, wird der Inhalt der zweiten Spalte (PID) ausgegeben - basta.

Viel Spass beim Weiterbasteln,
Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

komsomolze



Anmeldungsdatum: 03.03.2006
Beiträge: 429

BeitragVerfasst am: 05. Apr 2007 21:53   Titel:

Code:
ps h -C dnrd | awk '{print $1}'

_________________
mfg komsomolze
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy