Fehler bei der Abfrage, ob ein Programm läuft

daboss

daboss

Kaiser
[erledigt] Fehler bei der Abfrage, ob ein Programm läuft

Hallo,

ich würde gerne ein Programm via Skript starten (oder beenden). Allerdings soll das Programm nur gestartet werden, wenn es noch nicht läuft. Um das zu prüfen, habe ich hier im Forum diesen Threat hier gefunden. Aber das funktioniert nicht wie gewünscht. Es kommt in unten angegebenem Skript immer die Meldung, das das Programm läuft, auch wenn es das nicht tut.

Das Skript schaut bisher so aus:
Code:
#!/bin/bash

if [ "$1" = "" ]; then
    echo "Aufruf: boinc {start|stop}"

elif [ "$1" = "start" ]; then
    if [ "$(ps ax|grep -i "[b]oinc")" ]; then
        echo "Boinc laeuft bereits."
    else
        /home/alex/Downloads/BOINC/run_client -attach_project http://www.worldcommunitygrid.org/ blaKeyNummer >> /home/alex/boincLog.txt &
        echo "Boinc wurde gestartet."
    fi

elif [ "$1" = "stop" ]; then
    killall boinc

    echo "Boinc wurde beendet."
fi
(Vom Skripten hab ich bisher nicht sooo viel Ahnung ;) )

Wenn ich die if-Bedingung mir im Terminal ausgeben lasse, dann kommt, wenn das Programm nicht läuft, wie erwartet eine leere Zeile zurück:

Code:
 {-alex-|-gallien-} => [~]
(09:57:53) "$(ps ax|grep -i "[b]oinc")"
andernfalls halt natürlich

Code:
 {-alex-|-gallien-} => [~]
(09:57:44) "$(ps ax|grep -i "[b]oinc")"
bash: 10095 ?        S      0:02 ./boinc -attach_project http://www.worldcommunitygrid.org/ blaKeyNummer
Auch Wolfgangs Version aus dem oben verlinkten Threat (
Code:
 "$(ps ax|grep -i "boinc")"
) liefert dasselbe Verhalten.
Kann mir bitte jemad nen Tipp geben, was ich da falsch mache?
 
Zuletzt bearbeitet:
Vllt hilft

Code:
if [ ! $(pgrep boinc) ]; then 
   echo "laeuft nicht"
fi
 
Hm, nein, bringt leider auch nix (im Skript):

Code:
 {-alex-|-gallien-} => [~]
(10:30:31) bin/boinc.sh start
Boinc laeuft bereits.

Im Terminal komischerweise aber scheints zu passen:

Code:
 {-alex-|-gallien-} => [~]
(10:27:49) if [ ! $(pgrep boinc) ]; then echo "why??"; else echo "fuck u"; fi
why??

Irgendwie versteh ich das nicht :(
 
Haha, Witz komm raus! Manchmal könnt ich mich....
Naja, jetzt funktionierts, danke für deine Mühe, hab den Fehler gefunden.

...wenn das Script boinc.sh heißt, und ich dann nach oinc greppe, ist natürlich ein boinc in der Prozessliste, nämlich das Skript selbst... siehe
Code:
 {-alex-|-gallien-} => [~]
(10:48:56) boinc.sh start
10862 pts/1    S+     0:01 gedit bin/boinc.sh
10905 pts/0    S+     0:00 /bin/bash /home/alex/bin/boinc.sh start
pgrep boinc=10905
Boinc laeuft bereits.
 {-alex-|-gallien-} => [~]
(10:49:41) cp bin/boinc.sh blauba.sh
 {-alex-|-gallien-} => [~]
(10:50:25) ./blauba.sh start
10862 pts/1    S+     0:01 gedit bin/boinc.sh
pgrep boinc=
Boinc wurde gestartet.
 {-alex-|-gallien-} => [~]
(10:50:30) ./blauba.sh start
10862 pts/1    S+     0:01 gedit bin/boinc.sh
10931 pts/0    S      0:00 ./boinc -attach_project http://www.worldcommunitygrid.org/ blaKeyId
pgrep boinc=10931
Boinc laeuft bereits.

Das Thema sollte sich dann damit erledigt haben... Eine Bissspur mehr in der Schreibtischkante...
 
Ich finde case-anweisungen ja eleganter.

Code:
#!/bin/bash

if [ "$1" = "" ]; then
    echo "Aufruf: boinc {start|stop}"
    exit 99
fi

case $1 in

start)
           if [  "$(ps ax|grep -i "[b]oinc")" ]
           then
           echo "Boinc laeuft bereits."
           else
           /home/alex/Downloads/BOINC/run_client -attach_project http://www.worldcommunitygrid.org/ blaKeyNummer >> /home/alex/boincLog.txt 
           echo "Boinc wurde gestartet."
           fi
           ;;

stop)
           killall boinc
           echo "Boinc wurde beendet."
           ;;

*)        echo "Aufruf: boinc {start|stop}"
           exit 99
           ;;
esac
 

Ähnliche Themen

Switche abfragen über Script

Skript soll nicht doppelt laufen... kill pkill pid cron

[Erledigt] Shell-Skript lässt sich nicht mit Cron ausführen

HandbrakeCLI Shell Skript

verzeichniss suche funktioniert nicht

Zurück
Oben