2010-12-14 1 views
5

Jede Sitzung, die ich mit "-d -m" starte, akzeptiert keine "-X stuff [...]" Befehle, es sei denn, ich habe mindestens einmal an den Bildschirm angeschlossen. Es gibt keine Fehlermeldung, die Befehle kommen einfach nicht durch.Wie kann ich stuff-Befehle an einen Start-in-detached-Bildschirm senden?

Das Problem ist, dass ich die Sitzung von einem Cron-Job starten und bin nicht in der Lage, an den Bildschirm von innerhalb Cron anzuhängen. + A Drücken anschließendes Drücken d

Schritte

$ screen -m -d -S mydaemon bash 
$ screen -S mydaemon -X stuff "`printf "exit\\r"`" 
$ screen -ls 
     32456.mydaemon (Detached) 
$ screen -r -S mydaemon 
$ ^a d 
$ screen -S mydaemon -X stuff "`printf "exit\\r"`" 
$ screen -ls 
No Sockets found in /var/run/screen/S-user 

^a d Ctrl zu wiederholen anzeigt.

Versionen

CentOS release 5.5 (Final) 
Screen version 4.00.03 (FAU) 23-Oct-06 

Antwort

8

bearbeiten tun: Die beste Antwort auf diese Frage this other SO answer ist. Ich verlasse meine kluge Lösung hier sowieso, falls sie eine Lösung für ein ähnliches Problem einleitet.


Eine mögliche Abhilfe ist, eine zweite zu verwenden, bereits Sitzung ausgeführt wird und frei stehende Bildschirm, um den Bildschirm-Sitzung zu starten, der Sie das „Zeug“ Befehl in der beigefügten Modus senden möchten, und dann, dass Bildschirm-Sitzung eine detach senden Befehl und dann der Befehl stuff.

$ screen -dmS spawner 
$ screen -S spawner -X screen screen -dR mydaemon 
$ sleep 1 # may be necessary 
$ screen -S mydaemon -X detach 
$ screen -S mydaemon -X stuff "whatever" 

(Hinweis: die doppelten „screen“ ist nicht ein Tippfehler!) Sie sind immer noch links mit einer unstuffable Bildschirm-Sitzung (spawner), aber wenn die Ressourcen es wichtig, nimmt immer Sie sich entweder nur „töten -TERM ...“oder seine ilk es zu beenden (oder sie haben automatisch beendet nach einer gewissen Zeit, indem sie es mit so etwas wie

$ screen -dmS spawner bash -c "sleep 60" 

oder ähnlich beginnen).

+0

Vielen Dank, Sie sind super! –

+1

Danke für die Ermutigung Ich habe vergessen, dass ich entdeckt habe Das Ich musste einen kurzen Schlaf hinzufügen, nachdem ich die Bildschirmsitzung und ihre Trennung über -X erstellt hatte, um Rennbedingungen zu verhindern. Die Antwort wurde bearbeitet, um das widerzuspiegeln. –

0

Haben Sie stattdessen mit tmux in Betracht gezogen? Es ist viel besser für nicht interaktive Aufgaben geeignet.

+0

ich derzeit nicht tmux installiert haben, aber ich kann hineinschauen. Gibt es eine Anleitung oder kann Sie geben ein Beispiel für das, was ich brauche? –

+0

'man tmux' deckt so ziemlich alles ab, aber das sollte so ziemlich identisch sein mit dem, was Sie wollen: http://blog.hawkhost.com/2010/07/02/tmux-% E2% 80% 93-the-terminal-multiplexer-2/# tmux-shell-scripting –

-1

Mithilfe der Datei .screenrc können Sie festlegen, dass Dateien gestartet werden sollen.

screen -t <title> <window position> <command> 

Also, wenn Sie 7 beginnen top in Fenster wollte, dann würden Sie

screen -t window7top 7 top 
+0

Ihre Antwort ist nicht anwendbar –

0

Danke für Ron Kaminsky.

fand ich eine andere Art und Weise 'spawner' Bildschirm unterhalb der Linie

$ screen -S mydaemon -X screen screen -S spawner -dR 
    $ sleep 1 # may be necessary 
    $ screen -S spawner -X detach 
    $ screen -S spawner -X kill 
+0

Wie auch immer, ich kann keine Kommentare zu anderen Guy'answer hinzufügen. was passiert mit mir. :( –

0

Bildschirm -d -m/bin/bash „test

$ screen -dmS spawner 
    $ screen -S spawner -X screen screen -dR mydaemon 
    $ sleep 1 # may be necessary 
    $ screen -S mydaemon -X detach 

und fügen Sie zu töten.sh“

Bildschirm (freistehend) (mobile) (Shell)‚Was auszuführen‘

$ screen -d -m /bin/bash "test.sh" 
$ screen -li 
There is a screen on: 
     8540..Satelite (10/17/2013 04:53:22 AM)  (Detached) 
1 Socket in /var/run/screen/S-matt. 
Verwandte Themen