Anzeige:
Seite 2 von 2 ErsteErste 12
Ergebnis 16 bis 30 von 76

Thema: Syntax-Problem mit bash-Script

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    17.12.2007
    Beiträge
    40
    Hallo!

    So, nun habe ich mal weiter rumgetüftelt udn wieder mal herausgefunden, dass sich beim screen mit dem Parameter -X nicht einfach irgendwelche Befehle ausführen lassen.

    Dann bleibt mir wohl nichts anderes übrig, als die PID so zu beziehen und dies dann über kill zu beenden:

    Code:
    ps aux | grep 'SCREEN -dmS sc1 /home/shoutcast/sc_serv' | grep -v grep | cut -c9-16 | sed s/" "/""/g
    Leider bin ich aber im Moment überfragt, wieso er mir jetzt immer noch diese Fehlermeldung bringt:
    Code:
    h852677:~# kill "ps aux | grep 'SCREEN -dmS sc1 /home/shoutcast/sc_serv' | grep -v grep | cut -c9-16 | sed s/" "/""/g"
    -bash: kill: ps aux | grep 'SCREEN -dmS sc1 /home/shoutcast/sc_serv' | grep -v grep | cut -c9-16 | sed s/: no such pid
    -bash: kill: //g: no such pid
    Führe ich den Befehl manuell einzeln ebenfalls in der Konsole aus, erhalte ich jedoch die PID:

    Code:
    h852677:~# ps aux | grep 'SCREEN -dmS sc1 /home/shoutcast/sc_serv' | grep -v grep | cut -c9-16 | sed s/" "/""/g
    5349
    An was könnte das denn liegen?

    Und warum ich sc_serv in einem Screen starte hat eig. den Grund, dass man diesen dort besser beobachten kann.
    Mit einem kleinen Befehl screen -r sc1 kann man sofort sehen was der Server gerade treibt.

    Die Ausgabe von deinem Kommando ergibt übrigens folgendes:
    Code:
    h852677:~# ps -ef | grep sc_serv
    root      5349     1  0 14:20 ?        00:00:00 SCREEN -dmS sc1 /home/shoutcast/sc_serv
    root      5350  5349  0 14:20 pts/1    00:00:09 /home/shoutcast/sc_serv
    root     11450  3296  0 15:00 pts/0    00:00:00 grep sc_serv
    MfG
    Michael

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Zitat Zitat von Fireball22 Beitrag anzeigen
    ...Dann bleibt mir wohl nichts anderes übrig, als die PID so zu beziehen und dies dann über kill zu beenden:

    Code:
    ps aux | grep 'SCREEN -dmS sc1 /home/shoutcast/sc_serv' | grep -v grep | cut -c9-16 | sed s/" "/""/g
    Leider bin ich aber im Moment überfragt, wieso er mir jetzt immer noch diese Fehlermeldung bringt:
    Code:
    h852677:~# kill "ps aux | grep 'SCREEN -dmS sc1 /home/shoutcast/sc_serv' | grep -v grep | cut -c9-16 | sed s/" "/""/g"
    -bash: kill: ps aux | grep 'SCREEN -dmS sc1 /home/shoutcast/sc_serv' | grep -v grep | cut -c9-16 | sed s/: no such pid
    -bash: kill: //g: no such pid
    Führe ich den Befehl manuell einzeln ebenfalls in der Konsole aus, erhalte ich jedoch die PID...
    Das ist kein Wunder - Du übergibst dem kill ja nicht die Ausgabe des Befehls, sondern einfach die Zeichenfolge des Befehls (der Teil "ps ..." wird also nicht ausgeführt, sondern als Argument an kill verfüttert). Dazu musst Du Backticks benutzen:
    Code:
    kill `ps aux ...`
    Zu Deinem Befehlsmarathon für die Ermittlung der PID: Das geht einfacher:
    Code:
    ps -o pid= -C 'SCREEN -dmS sc1 /home/shoutcast/sc_serv'
    Noch ein kleiner Tipp unabhängig davon: Wenn man eine Prozessliste greppt und dabei den grep nicht sehen will (logo, will man meist nicht), dann kann man sich den 2. "grep -v" mit folgendem Trick sparen:
    Code:
    ps aux | grep '[S]CREEN -dmS sc1 /home/shoutcast/sc_serv'
    Die eckigen Klammern um den 1. Buchstaben bilden für grep einen regulären Ausdruck, nämlich eine Menge aus genau einem Buchstaben - er findet also nach wie vor den SCREEN, aber nicht mehr sich selbst, weil da ja "[S]CREEN" steht.

    Jan

    EDIT: Ausserdem hast Du in der Befehlszeile einen Syntaxfehler. Mit dem ersten " im sed beendest Du das Argument, das mit dem " vor ps anfängt, ab dem "/... wird alles als neues Argument betrachtet (deshalb auch 2 Fehlermeldungen). Merke - innerhalb eines per "..." begrenzten Blocks muss jedes " entwertet werden (\").
    Geändert von jan61 (07-01-2008 um 19:47 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.12.2007
    Beiträge
    40
    Vielen Dank für deine Antwort!

    Ich habe nun auch gleich mal deine Möglichkeit, die PID herauszufinden getestet, aber leider bringt mir der Befehl keine Ausgabe, obwohl das Kommando genau so in der Prozessliste steht.
    An was könnte das liegen?

    Die Ausgabe von ps aux:
    Code:
    root     28247  0.0  0.0  4348 1032 ?        Ss   16:14   0:00 SCREEN -dmS sc1 /home/shoutcast/sc_serv
    root     28248  0.2  0.0 37788 1764 pts/1    Ss+  16:14   0:00 /home/shoutcast/sc_serv
    Probier ich das ganze nun allerdings mit meinem "Befehlsmarathon", dann klappt das killen des screens zwar, nur beendet er dann nicht automatisch die Prozesse, die auf dem Screen laufen, was aber doch eig. der Fall sein möchte, oder nicht?
    Gibt es da noch einen Trick um diesen direkt mitzukillen, oder muss ich den dann wohl oder über mit einer zweiten kill-Anweisung extra beenden?

    Zudem bin ich gerade am überlegen, ob sich das ganze dann in so einem Prinzip verpacken lässt:

    kill PID || kill -9 PID

    Er würde dann so erstmal versuchen den Prozess BITTE beenden zu lassen, klappt das nicht, dann MUSS er eben den Prozess beenden?!
    Nur ich bin mir nicht sicher, ob kill auch den richtigen Return-Code dafür zurückgibt um diese ODER-Anweisung richtig zu Verarbeiten?
    Hast du damit vllt. schon Erfahrung?

    MfG
    Michael

    PS: Und noch vielen Dank für die geniale Idee mit dem Regulären Ausdruck!
    Da wär ich mal echt nicht drauf gekommen!

  4. #4
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    test, also [] kann nur "einfache" Werte vergleichen, falls ich deinen Code richtig interpretiere willst du:
    Code:
    if [ $? -eq 0 -o $? -eq 1 ]; then
    also Rückgabewert 0 oder 1.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  5. #5
    Registrierter Benutzer
    Registriert seit
    17.12.2007
    Beiträge
    40
    Vielen Dank, genau nach so etwas habe ich schon vergeblich gesucht, habe das ganze auch schon mit ||-Operatoren versucht, aber damit möchte die BASH ja leider nicht arbeiten, aber jetzt klappts perfekt, vielen Dank! =)

    MfG
    Michael

  6. #6
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    4 Minuten vor Deiner Antwort hab ich meine abgeschickt - da steht (hoffentlich ,-) alles drin. Das hat sich offenbar überschnitten.

    Jan

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •