Daemon Start Script

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von samysmurf, 11.09.2006.

  1. #1 samysmurf, 11.09.2006
    Zuletzt bearbeitet: 11.09.2006
    samysmurf

    samysmurf Grünschnabel

    Dabei seit:
    11.09.2006
    Beiträge:
    1
    Zustimmungen:
    0
    Hi @ all


    ich hab ma ein Script gebastelt,

    und jetzt hab ich ein paar probleme mit der
    erkennung ob der Daemon schon läuft und nicht noch einmal gestartet wird :-)

    Code:
    schnipp
    
    safestart)
    ps aux | grep -v grep | grep $PORT > /dev/null
    CHECK=$?
    if [ $CHECK -eq 0 ]
    then
    echo "$DESC: $NAME laeuft bereits"
    else
    echo "Starte $DESC: $NAME"
    if [ -e $DIR ];
    then
    cd $DIR
    screen -d -m -S $NAME $DAEMON $PARAMS
    else echo "Kein Verzeichnis: $DIR!"
    fi
    fi
    ;;
    
    
    schnapp
    
    ich möchte mittels grep die ps aux nach dem wert $PORT durchsuchen.
    Der Wert entspricht z.B. 30100 und die Variable wird auch richtig übergeben

    aber irgendwie findet er denn Wert nicht, bzw gibt ihn nicht weiter.
    Denn er gibt mir immer aus das dieses Prog schon läuft :-/ ich
    hab es auch schon mit nem Namen versucht, also den Deamon zusätzlich
    mit einem sonst nicht benutzen Namen gestartet,
    aber da bringt er auch immer das es schon läuft :-/



    Wo liegt mein Fehler ??

    Ich muss dazu sagen das ich noch ziemlich am Anfang meiner
    Shell "Scripting Karierre" stehe :-)

    Hoffe ihr könnt mir weiter helfen

    MFG

    Samy
     
  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. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Dein Fehler liegt darin, dass 30100 auch eine PID sein kann. Laeuft also ein Programm mit dieser PID, erkennt dein Skript dies als dein Daemon.

    Ausserdem ist der Befehl
    Code:
    ps aux | grep -v grep | grep $PORT > /dev/null
    total unsinnig. Hast du den mal in einer Shell ausgefuehrt?
    Code:
    theton@BigTAPS:~> ps aux | grep -v grep | grep $PORT > /dev/null
    Usage: grep [OPTION]... PATTERN [FILE]...
    Try `grep --help' for more information.
    
    Abgesehen davon wuerdest du im Erfolgsfall keinen Output bekommen, da du den ja nach /dev/null und damit ins Nirvana schickst.
     
  4. #3 Xanti, 12.09.2006
    Zuletzt bearbeitet: 12.09.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    @samysmurf: Du versuchst den exit-Status von grep auszuwerten, was aber misslingt, da dieser auch dann 0 ist, wenn er nichts gematcht hat (schliesslich hat er erfolgreich nix gematcht). ;)

    Besser wäre, dass Du die Ausgabe von grep auf Nullstring testest (keine Ausgabe = Nullstring, Ausgabe != Nullstring). In der Art:

    Code:
    if [ "$(ps aux | grep -v grep | grep $PORT)" ]; then
    
    Dass $PORT auch als PID vorkommen kann, darauf hat Dich theton bereits hingewiesen.

    @theton: Mit "ps aux | grep -v grep" will man vermeiden, dass der grep-Befehl selber von grep gematcht wird. Vielleicht solltest Du der Variable PORT einfach mal einen Wert zuweisen. ;)

    Gruss, Xanti
     
  5. #4 Wolfgang, 12.09.2006
    Wolfgang

    Wolfgang Foren Gott

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

    Zunächst möchte ich auch hier den Rat geben, Variablen die als Pattern an grep übergeben werden immer gequotet zu übergeben.
    Im Falle eines Leerstrings bekommst du sonst nicht das was du willst.
    Dazu gab es neulich hier einen Thread, wo sogar jemand einen Bugreport verfassen wollte. ;)

    Um den Exitstatus einer Pipe zu erhalten, schließe diesen einfach in Klammern ein.
    Die Bash startet - anders als einige andere Shellinterpreter (ksh) - eine Subshell in der Pipe. Mit Klammerung kommst du aber immer auf den richtigen Wert.
    Wenn grep matcht, ist dieser Null sonst 1 oder im Fehlerfall >1.
    Code:
    
    $ CHECK=$((ps aux | grep -v "grep" | grep "$PORT">/dev/null); echo $?);
    $ echo $CHECK
    0
    $ PORT="UNMOEGLICH"
    $ CHECK=$((ps aux | grep -v "grep" | grep "$PORT">/dev/null); echo $?);
    $ echo $CHECK
    1
    
    Gruß Wolfgang
     
  6. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Wieder was gelernt. Kommt in meine Notizensammlung.

    Gruss, Xanti
     
Thema:

Daemon Start Script

Die Seite wird geladen...

Daemon Start Script - Ähnliche Themen

  1. Der start-stop-daemon setzt eigenen max open files Wert (ulimit -n)

    Der start-stop-daemon setzt eigenen max open files Wert (ulimit -n): Hallo zusammen Habe eine Frage zu open files bei Linux. Die maximale open Files bei Linux kann man ja über ulimit -n einstellen. Oder man...
  2. Daemon starten

    Daemon starten: Ich möchte auf meinem Linux Router einen Daemon (freebox) im Hintergrund starten. Die freebox liegt unter /jffs/var/etc Nach vielen Stunden...
  3. Problem beim starten von FTP Daemon

    Problem beim starten von FTP Daemon: Hallo, nachdem ich meinen server neu eingerichtet habe, wolltee ich denFTP Daemon aufstellen.. nun kam aber eine fehlermeldung: Starting ftp...
  4. starting Bootlogdaemon failed

    starting Bootlogdaemon failed: hi, bei meinem ubuntu kommt beim booten die meldung "starting bootlogdaemon fail" in der /etc/default/bootlogd steht aber: # Run bootlogd at...
  5. fake start stop daemon called doing nothing

    fake start stop daemon called doing nothing: :hilfe2: Habe einen Debian Server aufgesetzt. Bekomme nun die Warnung beim Systemstart "fake-start-stop-daemon called, doing nothing" egal bei...