Problem mit Shellscript

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Pit910
Beiträge: 19
Registriert: 11.03.2014 15:03:25

Problem mit Shellscript

Beitrag von Pit910 » 11.03.2014 15:05:44

Hallo,

ich habe mich hier eben angemeldet weil ich ein Problem habe, ein Shellscript auf meinem Server auszuführen.

Der Inhalt ist so:

Code: Alles auswählen

screen -x m25567
$(stop)
Und es soll so laufen:

Das Script soll in den Screen wechseln und in diesem Screen dann den Command "stop" schreiben und die "Enter" taste drücken.

Wenn ich das Script ausführe, dann wechselt er zwar in den Screen führt aber den Command stop nicht aus.

Woran liegt das?

Danke im Vorraus!

Benutzeravatar
Drache
Beiträge: 772
Registriert: 22.11.2009 05:49:55

Re: Problem mit Shellscript

Beitrag von Drache » 11.03.2014 15:19:45

1. Nachfrage: Shellscript heißt bash? Oder vielleicht was anderes?

2. Nachfrage: Was ist die Variable "stop" denn eigentlich … oder willst du nur den Text "stop" schreiben, oder hast du dir ein weiteres Programm/oder einen alias angelegt, der mit dem Aufruf stop (ich kenne jedenfalls unter Debian kein entsprechendes Programm) etwas anfangen kann? → Also wann wird die Variable, die du mit $ aufrufst denn gefüllt?

3. Nachfrage: hast du die Shebang

Code: Alles auswählen

#!/bin/bash
einfach nur hier weggelassen, oder vergessen?
“Don't you think that if I were wrong, I'd know it?” (Dr. Sheldon Cooper)
XFCE: alt,steinhart,langweilig,immer noch da.

Pit910
Beiträge: 19
Registriert: 11.03.2014 15:03:25

Re: Problem mit Shellscript

Beitrag von Pit910 » 11.03.2014 16:59:03

Drache hat geschrieben:1. Nachfrage: Shellscript heißt bash? Oder vielleicht was anderes?

2. Nachfrage: Was ist die Variable "stop" denn eigentlich … oder willst du nur den Text "stop" schreiben, oder hast du dir ein weiteres Programm/oder einen alias angelegt, der mit dem Aufruf stop (ich kenne jedenfalls unter Debian kein entsprechendes Programm) etwas anfangen kann? → Also wann wird die Variable, die du mit $ aufrufst denn gefüllt?

3. Nachfrage: hast du die Shebang

Code: Alles auswählen

#!/bin/bash
einfach nur hier weggelassen, oder vergessen?
2. Ich habe in diesem Screen eine Minecraft-Server Anwendung laufen die ich über den Befehl "stop" beenden kann. Dieser Befehl muss einfach nur dort eingegeben werden, wenn ich im Screen bin gebe ich einfach stop ein und der Server fährt runter.

3. Nein hatte ich nicht drin.

Benutzeravatar
Drache
Beiträge: 772
Registriert: 22.11.2009 05:49:55

Re: Problem mit Shellscript

Beitrag von Drache » 11.03.2014 17:07:20

Pit910 hat geschrieben:
2. Ich habe in diesem Screen eine Minecraft-Server Anwendung laufen die ich über den Befehl "stop" beenden kann. Dieser Befehl muss einfach nur dort eingegeben werden, wenn ich im Screen bin gebe ich einfach stop ein und der Server fährt runter.

3. Nein hatte ich nicht drin.
Okay, wenn ich das richtig verstanden habe sollte dein Shellskript folgendermaßen aussehen:

Code: Alles auswählen

#!/bin/bash
screen -x m25567
stop
dann das Skript ausführbar machen

Code: Alles auswählen

chmod +x 
und dann sollte es mit dem /Pfad/Namen des Skripts als Aufruf getan sein.
“Don't you think that if I were wrong, I'd know it?” (Dr. Sheldon Cooper)
XFCE: alt,steinhart,langweilig,immer noch da.

Pit910
Beiträge: 19
Registriert: 11.03.2014 15:03:25

Re: Problem mit Shellscript

Beitrag von Pit910 » 11.03.2014 17:11:07

Drache hat geschrieben:
Pit910 hat geschrieben:
2. Ich habe in diesem Screen eine Minecraft-Server Anwendung laufen die ich über den Befehl "stop" beenden kann. Dieser Befehl muss einfach nur dort eingegeben werden, wenn ich im Screen bin gebe ich einfach stop ein und der Server fährt runter.

3. Nein hatte ich nicht drin.
Okay, wenn ich das richtig verstanden habe sollte dein Shellskript folgendermaßen aussehen:

Code: Alles auswählen

#!/bin/bash
screen -x m25567
stop
dann das Skript ausführbar machen

Code: Alles auswählen

chmod +x 
und dann sollte es mit dem /Pfad/Namen des Skripts als Aufruf getan sein.
Danke für deine Antworten. Aber wenn ich das Script starte dann wechselt er zwar in den Screen aber stop wird nicht ausgegeben!

ich starte das so ./stop.sh

Benutzeravatar
Patsche
Beiträge: 3263
Registriert: 21.06.2013 01:47:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: /home/10001101001

Re: Problem mit Shellscript

Beitrag von Patsche » 11.03.2014 17:13:19

Und wenn du es so schreibst?

Code: Alles auswählen

#!/bin/bash
screen -x m25567 ; stop
Du könntest auch ein

Code: Alles auswählen

#!/bin/bash
screen -x m25567 && stop
ausprobieren.

Pit910
Beiträge: 19
Registriert: 11.03.2014 15:03:25

Re: Problem mit Shellscript

Beitrag von Pit910 » 11.03.2014 17:25:53

Patsche hat geschrieben:Und wenn du es so schreibst?

Code: Alles auswählen

#!/bin/bash
screen -x m25567 ; stop
Du könntest auch ein

Code: Alles auswählen

#!/bin/bash
screen -x m25567 && stop
ausprobieren.
Mit beiden leider nicht.

Es öffnet sich der Screen. Wenn ich aus dem Screen dann rausgehe, führt er den Befehl dann aber aus!

Benutzeravatar
smutbert
Beiträge: 8350
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Problem mit Shellscript

Beitrag von smutbert » 11.03.2014 18:04:47

Ok, von screen habe ich keine Ahnung, aber das Verhalten ist einigermaßen klar. Die Shell arbeitet die Befehele nacheinander ab: zuerst startet es screen und wenn das beendet ist führt es den nächsten Befehl aus :wink:

Du müsstest also zB screen den auszuführenden Befehl irgendwie als Parameter mitgeben, wenn du zB eine screen-Sitzung namens test hast

Code: Alles auswählen

$ screen -r
There is a screen on:
	32754.test	(2014-03-11 18:01:54)	(Attached)
There is no screen to be resumed.
kannst du mit

Code: Alles auswählen

screen -S test -X stuff $'ls -al\n'
den Befehl ls -al ausführen.

Jumper0
Beiträge: 25
Registriert: 30.09.2013 20:34:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Problem mit Shellscript

Beitrag von Jumper0 » 19.03.2014 15:41:53

Hi,

so führst du zum Beispiel ein Backup des Minecraft-Servers in der Screen-Konsole aus.

Code: Alles auswählen

screen -S minecraft -p 0 -X eval "stuff \"save-all\"\\015"
Hoffentlich kann dir das weiterhelfen !

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: Problem mit Shellscript

Beitrag von roli » 20.03.2014 09:08:31

Pit910 hat geschrieben:2. Ich habe in diesem Screen eine Minecraft-Server Anwendung laufen die ich über den Befehl "stop" beenden kann. Dieser Befehl muss einfach nur dort eingegeben werden, wenn ich im Screen bin gebe ich einfach stop ein und der Server fährt runter.
Wenn ich das ganze richtig verstanden habe, könnte "expect" dein Problem lösen, siehe z.B. hier: Programme fernsteuern mit expect
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Problem mit Shellscript

Beitrag von Cae » 20.03.2014 14:33:30

Nochmal zur Verdeutlichung, du willst screen -X verwenden, wie in den Posts gegen Ende gezeigt wurde. Die ganzen Versuche mit stop als eigenem Befehl sind zum Scheitern verurteilt.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Problem mit Shellscript

Beitrag von habakug » 20.03.2014 14:59:51

Hallo!

Das geht so:

Code: Alles auswählen

$ screen -r XXXX -X stuff 'ls -l'`echo -ne '\015'`
Das XXXX ist die Nummer (hier 2255) des Screens, wie in "screen -list" ausgegeben:

Code: Alles auswählen

$ screen -list
There is a screen on:
	2255.pts-0.leppi	(Detached)
1 Socket in /run/screens/S-hawk.
Das "`echo -ne '\015'`" simuliert die Eingabetaste.

Gruss, habakug

edit:
Wenn die Session schon irgendwo anders "attached" ist, geht es natürlich auch mit dem kleinen "-x". Also der gewünschte Befehl würde etwa so lauten:

Code: Alles auswählen

$ screen -x m25567 -X stuff './stop'`echo -ne '\015'`
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Antworten