Befehl an screen senden

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von janis, 28.03.2009.

  1. janis

    janis BOFH

    Dabei seit:
    02.09.2007
    Beiträge:
    179
    Zustimmungen:
    0
    Ort:
    Deutschland
    Hallo Leute,

    ich habe ein shell Script (ab)geschrieben, was einen Battlefield2 Server starten und stoppen soll. Der Server wird in einer Screen-Session gestartet. Um ihn zu stoppen führe ich diesen Befehl aus: screen -S $NAME -X stuff $'exit\n' der Funktioniert aber nur, wenn ich die Session vorher mindestens ein Mal wiederherstellt habe. Woran liegt das? Wie kann ich das umgehen?

    Script ist im Anhang
    Jan
     

    Anhänge:

  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. janis

    janis BOFH

    Dabei seit:
    02.09.2007
    Beiträge:
    179
    Zustimmungen:
    0
    Ort:
    Deutschland
    Kann mir denn keiner Helfen?

    Ich will nur wissen, was ich tun muss, damit die Befehle immer ankommen, und nicht nur dann, wenn die Session schon mal wiederhergestellt wurde
     
  4. seim

    seim seim oder nicht seim?

    Dabei seit:
    08.09.2006
    Beiträge:
    909
    Zustimmungen:
    0
    Ort:
    /mnt/reallife
    Heißt dass dein Befehl reagiert nur wenn du mind. einmal den Screen geöffnet und dann wieder "minimiert" hattest?

    Dann liegt das einglich nur an einem der beiden Befehle mit screen - einmal der oben gepostete und der zum starten:

    screen -AmdS $NAME ./start.sh $PARAMS
     
  5. janis

    janis BOFH

    Dabei seit:
    02.09.2007
    Beiträge:
    179
    Zustimmungen:
    0
    Ort:
    Deutschland
    Exakt

    Wunderbar: aber ich habe bei "man screen" keine Parameter gefunden, der dafür Verantwortlich sein könnte, oder erwartest du, dass ich die ganzen 80 Seiten der Manual durchlese?
     
  6. #5 bytepool, 29.03.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    erwartest du dass wir das fuer dich tun? :P

    Da duerften sich deine Skript Schreiber aber auch nur leicht vertan haben, es sollte eigentlich
    Code:
    screen -p foo -X stuff $'exit\n'
    
    heissen. Wobei je nach Sinn und Zweck "quit" statt "stuff $'exit\n'" vielleicht auch moeglich waere, aber das forciert dann den Abbruch des Prozesses, statt ihn sauber zu beenden.
    Und ich gehe jetzt mal davon aus dass du so schlau warst, und $NAME entweder vorher selber gesetzt hast, oder die Variable mit dem richtigen Namen ersetzt hast.

    mfg,
    bytepool
     
  7. janis

    janis BOFH

    Dabei seit:
    02.09.2007
    Beiträge:
    179
    Zustimmungen:
    0
    Ort:
    Deutschland
    Nein, aber das einer von euch vielleicht was weiß ;-)
    Laut http://www.tutorials.de/forum/linux-unix/219243-screen-befehl-uebergeben.html soll es so gehen.
    Habe jetzt mal deinen Code ausprobiert: screen -p 2888 -X stuff $'exit\n' wobei 2888 die aktuelle ID der Session ist. Aber es passiert einfach nichts. Der Befehl scheint nicht anzukommen! Auch nicht, wenn ich den Screen vorher schon einmal geöffnet wurde.

    "Quit" beendet doch den Screen? Das will ich nicht, weil dann das Programm darin dadurch abstürzt, ich will den Spielserver aber sauber beenden.

    Und ja, $NAME ist gesetzt und ist auch bei Start und Stop gleich.
     
  8. #7 bytepool, 30.03.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    ah, my bad, ich habe die man-page in der Tat missverstanden, bzw. mir war nicht wirklich bewusst dass es scheinbar noch einen klaren Unterschied zwischen Sessions, Displays und Windows gibt. Ich war aber trotzdem nicht ganz auf dem Holzweg:
    Code:
    screen -p 0 -S foo -X stuff $'echo hallo\n'
    
    sollte funktionieren. Bei mir hat sich screen ohne das -p noch darueber beschwert, dass ich kein Display angegeben habe, was ich hier mit -p 0 (Null) mache.
    Das laesst sich uebrigens gut testen, wenn du einfach noch eine zweite Shell aufmachst, und von dort aus mit -X Befehle an die erste Shell sendest, auf der du screen offen laesst. Dann blendet er fuer einige Zeit Fehlermeldungen ein.

    mfg,
    bytepool
     
  9. #8 janis, 31.03.2009
    Zuletzt bearbeitet: 31.03.2009
    janis

    janis BOFH

    Dabei seit:
    02.09.2007
    Beiträge:
    179
    Zustimmungen:
    0
    Ort:
    Deutschland
    Danke!

    Es funktioniert :-)
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Noch eine Frage:
    Kann ich einen "Screenshot" bekommen?
    Ich möchte einfach von der Ausgabe einen Snapshot machen, den ich dann verarbeiten will.
    Praktisch:
    Ich habe in den Screen einen Gameserver laufen, und möchte die Ausgabe auf einer Website anzeigen. Also wenn die Seite geladen wird, soll ein PHP Script im Screen vorbeischauen, und die aktuelle Anzeige auch auf der Homepage anzeigen.
     
  10. seim

    seim seim oder nicht seim?

    Dabei seit:
    08.09.2006
    Beiträge:
    909
    Zustimmungen:
    0
    Ort:
    /mnt/reallife
    Hab ich noch nie benutzt aber eine komplette Ausgabe in eine Datei speichern ging normal immer damit:

    Code:
    ./start > hieralleswasinderkonsolegewesenwäre.txt
     
  11. janis

    janis BOFH

    Dabei seit:
    02.09.2007
    Beiträge:
    179
    Zustimmungen:
    0
    Ort:
    Deutschland
    Da legt er eine leere Datei an, und öffnet den Screen
     
  12. #11 seim, 31.03.2009
    Zuletzt bearbeitet: 31.03.2009
    seim

    seim seim oder nicht seim?

    Dabei seit:
    08.09.2006
    Beiträge:
    909
    Zustimmungen:
    0
    Ort:
    /mnt/reallife
    hmm..

    Ok scheint so als würde der screen jegliche Ausgabe aufessen...
    Allerdings hat es bei mir so funktioniert:

    Das hier ist quasi der "Emulator" für die BF2 Binary.. der gibt nur ein "test" in die Shell aus der BF Server macht da bissl mehr denk ich..
    Code:
    #!/bin/bash
    
    echo test
    Also das wird in einem anderen Skript (tst2.sh) aufgerufen:
    Code:
    #!/bin/bash
    
    ./fakeserver.sh > echo.txt
    Wenn du das jetz mit screen startest geht das und die echo.txt wird mit einem "test" gefüllt:
    Code:
    screen -AmdS tst ./tst2.sh

    Ich weis nicht warum, aber das wird sicher jmd im Laufe des Abends beantworten :D weil direkt mit
    Code:
    screen -AmdS tst "./fakeserver.sh > test.txt"
    geht das komischerweise nicht..
     
  13. #12 bytepool, 31.03.2009
    Zuletzt bearbeitet: 31.03.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    zum mitloggen der Displays kennt screen die schoene Option -L. Der Output steht dann standardmaessig im selben Verzeichnis unter screenlog.0, etc.

    Edit: Vorrausgesetzt der User hat im aktuellen Verzeichnis Schreibrechte, natuerlich.

    mfg,
    bytepool
     
  14. #13 janis, 31.03.2009
    Zuletzt bearbeitet: 31.03.2009
    janis

    janis BOFH

    Dabei seit:
    02.09.2007
    Beiträge:
    179
    Zustimmungen:
    0
    Ort:
    Deutschland
    -L hört sich gut an. Kann ich den Ausgabeort noch irgendwie selber festlegen?
    gibt es dafür noch einen parameter?

    Edit://
    Habe grade ein Problem festgestellt:
    Die Konsole sieht normal so aus:
    Code:
    ./proc/2935/task/2935/mem
    find: Symbolic link `./proc/2935/task/2935/cwd' is part of a loop in the directory hierarchy; we have already visited the directory to which it points.
    ./proc/2935/task/2935/cwd
    find: Symbolic link `./proc/2935/task/2935/root' is part of a loop in the directory hierarchy; we have already visited the directory to which it points.
    ./proc/2935/task/2935/root
    ./proc/2935/task/2935/exe
    ./proc/2935/task/2935/mounts
    ./proc/2935/task/2935/smaps
    ./proc/2935/task/2935/attr
    ./proc/2935/task/2935/attr/current
    ./proc/2935/task/2935/attr/prev
    ./proc/2935/task/2935/attr/exec
    ./proc/2935/task/2935/attr/fscreate
    ./proc/2935/task/2935/attr/keycreate
    ./proc/2935/task/2935/attr/sockcreate
    ./proc/2935/task/2935/wchan
    ./proc/2935/task/2935/cpuset
    ./proc/2935/task/2935/oom_score
    ./proc/2935/task/2935/oom_adj
    ./proc/2935/fd
    ./proc/2935/fd/0
    ./proc/2935/fd/1
    ./proc/2935/fd/2
    find: Symbolic link `./proc/2935/fd/3' is part of a loop in the directory hierarchy; we have already visited the directory to which it points.
    ./proc/2935/fd/3
    find: ./proc/2935/fd/4: Datei oder Verzeichnis nicht gefunden
    ./proc/2935/environ
    ./proc/2935/auxv
    ./proc/2935/status
    ./proc/2935/cmdline
    ./proc/2935/stat
    ./proc/2935/statm
    ./proc/2935/maps
    ./proc/2935/numa_maps
    ./proc/2935/mem
    find: Symbolic link `./proc/2935/cwd' is part of a loop in the directory hierarchy; we have already visited the directory to which it points.
    ./proc/2935/cwd
    find: Symbolic link `./proc/2935/root' is part of a loop in the directory hierarchy; we have already visited the directory to which it points.
    ./proc/2935/root
    ./proc/2935/exe
    ./proc/2935/mounts
    ./proc/2935/mountstats
    ./proc/2935/smaps
    ./proc/2935/attr
    ./proc/2935/attr/current
    ./proc/2935/attr/prev
    ./proc/2935/attr/exec
    ./proc/2935/attr/fscreate
    ./proc/2935/attr/keycreate
    ./proc/2935/attr/sockcreate
    ./proc/2935/wchan
    ./proc/2935/cpuset
    ./proc/2935/oom_score
    ./proc/2935/oom_adj
    ./usr/X11R6/bin/pager
    ./usr/X11R6/bin/zsoelim
    ./usr/X11R6/bin/vimdiff
    ./usr/X11R6/bin/unlink
    ./usr/X11R6/bin/less
    ./usr/X11R6/bin/ex
    ./usr/X11R6/bin/mc
    ./usr/X11R6/bin/screen
    ./usr/X11R6/bin/mcedit
    ./usr/X11R6/bin/wget
    ./usr/X11R6/bin/rview
    ./usr/X11R6/bin/editor
    ./usr/X11R6/bin/vim.tiny
    ./usr/X11R6/bin/vim
    ./usr/X11R6/bin/find
    ./usr/X11R6/bin/troff
    ./usr/X11R6/bin/grotty
    ./usr/X11R6/bin/tbl
    ./usr/X11R6/bin/sudoedit
    ./usr/X11R6/bin/man
    find: Symbolic link `./usr/X11R6/bin/X11' is part of a loop in the directory hierarchy; we have already visited the directory to which it points.
    ./usr/X11R6/bin/X11
    ./usr/X11R6/bin/nroff
    ./usr/X11R6/bin/vi
    ./usr/X11R6/bin/sudo
    ./usr/X11R6/bin/which
    ./usr/X11R6/bin/mcview
    ./usr/X11R6/bin/whoami
    ./usr/X11R6/bin/locale
    ./usr/X11R6/bin/groff
    ./usr/X11R6/bin/rvim
    ./usr/X11R6/bin/gtbl
    ./usr/share/doc/python/python-policy.html
    ./usr/share/doc/libapache2-mod-php5
    ./usr/share/doc/libapache2-mod-php5/examples
    ./usr/share/doc/libapache2-mod-php5/PEAR
    ./usr/share/doc/vim-common
    ./usr/share/doc/lib32gcc1
    ./usr/share/doc/libstdc++6
    ./usr/share/doc/debconf-i18n
    ./usr/share/doc/openssh-server
    ./usr/share/doc/ncurses-bin
    ./usr/share/doc/libpango1.0-common
    ./usr/share/doc/perl
    ./usr/share/doc/perl-modules
    ./usr/share/doc/libncurses5
    ./usr/share/doc/libperl5.8
    ./usr/share/doc/php5-mysql
    ./usr/share/doc/php5-mysql/examples
    ./usr/share/doc/php5-mysql/PEAR
    
    server:/# find -L -amin -5 [.]screen[.]
    find: Der Pfad muà vor dem Suchkriterium stehen.
    Usage: find [-H] [-L] [-P] [path...] [expression]
    server:/# find -L -amin -5 / [.]screen[.]
    find: Der Pfad muà vor dem Suchkriterium stehen.
    Usage: find [-H] [-L] [-P] [path...] [expression]
    server:/# find -L -amin -5 / [.*]screen[.*]
    find: Der Pfad muà vor dem Suchkriterium stehen.
    Usage: find [-H] [-L] [-P] [path...] [expression]
    server:/# find -L -amin -5 / [.)*
    bash: syntax error near unexpected token `)'
    server:/# find -L -amin -5 / [.]*
    find: Der Pfad muà vor dem Suchkriterium stehen.
    Usage: find [-H] [-L] [-P] [path...] [expression]
    server:/# find -L screenlogß.0
    find: screenlogß.0: Datei oder Verzeichnis nicht gefunden
    server:/# find -L screenlog.0
    find: screenlog.0: Datei oder Verzeichnis nicht gefunden
    server:/# exit
    exit
    bf@server:/srv/www$ dir
    analog           ebay        Kopie\ von\ perf_test.php  perf_output.php
    apache2-default  filehost    linux                      perf_test.php
    bf.php           giebe       mia                        phpmyadmin
    block            Jan         news                       raster.png
    DBackup          joman92.de  pdf.php
    bf@server:/srv/www$ cd
    bf@server:~$ dir
    bf2   cod4-linux-server-06282008.tar.bz2  script
    cod4  cod4-linux-server-12032007.tar.bz2  tsserver2.pid
    bf@server:~$ screen -L "echo halle!"
    -sh: !": event not found
    bf@server:~$ screen -L echo "halle"
    [screen is terminating]
    bf@server:~$ dir
    bf2   cod4-linux-server-06282008.tar.bz2  screenlog.0  tsserver2.pid
    cod4  cod4-linux-server-12032007.tar.bz2  script
    bf@server:~$ more screenlog.0
    halle
    bf@server:~$ unlink screenlog.0
    bf@server:~$ cd script
    bf@server:~/script$ dir
    apache  control_bf
    bf@server:~/script$ vi control_bf
    bf@server:~/script$ dir
    apache  control_bf
    bf@server:~/script$ pwd
    /home/bf/script
    bf@server:~/script$ vi control_bf
    bf@server:~/script$ vi control_bf
    bf@server:~/script$ cd /srv/www
    bf@server:/srv/www$ dir
    analog           ebay        Kopie\ von\ perf_test.php  perf_output.php
    apache2-default  filehost    linux                      perf_test.php
    bf.php           giebe       mia                        phpmyadmin
    block            Jan         news                       raster.png
    DBackup          joman92.de  pdf.php
    bf@server:/srv/www$ vi lol
    bf@server:/srv/www$ unlink lol
    bf@server:/srv/www$ dir
    analog           ebay        Kopie\ von\ perf_test.php  perf_output.php
    apache2-default  filehost    linux                      perf_test.php
    bf.php           giebe       mia                        phpmyadmin
    block            Jan         news                       raster.png
    DBackup          joman92.de  pdf.php
    bf@server:/srv/www$ cd ~/script
    bf@server:~/script$ dir
    apache  control_bf
    bf@server:~/script$ ./control_bf start
    Starting server: bf_server
    ... done
    bf@server:~/script$ dir
    apache  control_bf
    bf@server:~/script$ dir
    apache  control_bf
    bf@server:~/script$ vi control_bf
    bf@server:~/script$ cd /usr/games/bf32
    -sh: cd: /usr/games/bf32: Datei oder Verzeichnis nicht gefunden
    bf@server:~/script$ cd /usr/games/bf2
    bf@server:/usr/games/bf2$ dir
    admin       core.2795  core.3467        pylib-2.3.4.zip  rotate_demo.cfg
    adminutils  core.2821  lowercaseDir.py  python           screenlog.0
    bin         core.3412  mods             readmes          start.sh
    core.2620   core.3423  pb               ret
    bf@server:/usr/games/bf2$ su
    Password:
    server:/usr/games/bf2# mc
    
    server:/usr/games/bf2# exit
    exit
    bf@server:/usr/games/bf2$ su
    Password:
    server:/usr/games/bf2# mc
    server:/usr/games# ./start.sh
    bash: ./start.sh: Datei oder Verzeichnis nicht gefunden
    server:/usr/games# ./start.sh
    bash: ./start.sh: Datei oder Verzeichnis nicht gefunden
    server:/usr/games# ./start.sh
    bash: ./start.sh: Datei oder Verzeichnis nicht gefunden
    server:/usr/games# ./start.sh
    bash: ./start.sh: Datei oder Verzeichnis nicht gefunden
    server:/usr/games# ./start.sh
    bash: ./start.sh: Datei oder Verzeichnis nicht gefunden
    
    server:/usr/games/bf2# screen -r
    There is no screen to be resumed.
    server:/usr/games/bf2# unlink screenlog.0
    server:/usr/games/bf2# screen -r
    There is no screen to be resumed.
    server:/usr/games/bf2# exit
    exit
    bf@server:/usr/games/bf2$ screen -r
    Battlefield II Dedicated Server v1.1.2965-797.0(x86_64)
    "Last Invasion"                          Average FPS:  34 [d:0, o:20]
    IP: 127.0.1.1 Port: 16567 (LAN)          Map: operation_clean_sweep
    Game mode: gpm_coop/16                   Mod: bf2
    Players: 0/16 (0 r) (0 connecting)       Round: 1/3          Status: [playing]
    -------------------------------------------------------------------------------
    
    
    
    Loaded 15%
    Loaded 16%
    Loaded 17%
    Loaded 18%
    Loaded 19%
    Loaded 20%
    Loaded 21%
    Loaded 22%
    Loaded 23%
    Loaded 25%
    Loaded 26%
    Loaded 27%
    Loaded 29%
    Loaded 100%
    >
    
    Und der aktualisiert das im Sekundentakt->d.h. er schreibt sekündlich alles neu -> riesen Logdatei.
    Kann ich das irgendwie kürzen?
    Bzw. zu das letzte anzeigen?
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 bytepool, 31.03.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    hat dir eine Manpage irgendwann mal was grausames angetan, dass du solche Angst hast da reinzugucken? :P

    Soweit ich weiss unterstuetzt screen von sich aus keine rotating Logfiles oder solche Spielchen, aber du kannst die Datei(en) natuerlich mit anderen Programmen, sozusagen "von Aussen", beliebig veraendern.
    'man screen' ist dein Freund. :P

    mfg,
    bytepool
     
  17. #15 janis, 31.03.2009
    Zuletzt bearbeitet: 31.03.2009
    janis

    janis BOFH

    Dabei seit:
    02.09.2007
    Beiträge:
    179
    Zustimmungen:
    0
    Ort:
    Deutschland
    Ja, als ich sie an die Druckvorschau geschickt habe, hat es fünf Minuten zum spoolen gedauert ;-)

    OK, aber war gar nicht so schwer^^
    Sorry fürs zuspammen:
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    OK, doch net.
    Ich schaffe es nicht, den Pfad zu ändern:
    screen -S bf_server -X hardcopydir /srv/www/control/
    scheint keinen Effekt zu haben!
    Die Screens, die ich mit
    $ screen -S bf_server -X hardcopy dmp0
    erstelle laden trotzdem im Standartordner
     
Thema:

Befehl an screen senden

Die Seite wird geladen...

Befehl an screen senden - Ähnliche Themen

  1. Befehl an Prozess schicken, der per screen abläuft

    Befehl an Prozess schicken, der per screen abläuft: Moin! Ich habe einige Prozesse gestartet, die mit screen -d im Hintergrund laufen. Ich würde jetzt gerne an diese Prozesse Kommandozeilenbefehle...
  2. wie einen befehl an ein screen-session senden, ohne session zu öffnen?

    wie einen befehl an ein screen-session senden, ohne session zu öffnen?: Hallo, ich möchte gern einen befehl (ssh-verbindung öffnen) an eine screen-session senden, aber die session nicht öffnen. hab schon einiges...
  3. screen --> welcher befehl bei Suse 9.2 ?

    screen --> welcher befehl bei Suse 9.2 ?: huhu, wollte fragen wie der befehl für einen screen bei Suse 9.2 ist. bei debian konnte ich "screen -A" machen, damit ich ein neues fenster...
  4. Centosbefehle

    Centosbefehle: Hallo ich habe ein Centos 7.2.15.11 image (mit Hdclone von Miray gemacht) Ich möchte das Image auf eine existierende Ubuntu installation...
  5. Kurzzusammenfassung der Befehle und Progr. für die shell

    Kurzzusammenfassung der Befehle und Progr. für die shell: Hallo zusammen, bei der Verbesserung eines meiner Scripte bin ich nach ausführlicher Recherche auf den Befehl (Prog?) "file" gestossen. Dieser...