2010-12-14 8 views
5

Cualquier sesión que empiece con "-d -m" no aceptará comandos "-X cosas [...]" a menos que haya adjuntado a la pantalla al menos una vez. No hay mensaje de error, los comandos simplemente no se transmiten.¿Cómo puedo enviar comandos de cosas a una pantalla de inicio en separación?

El problema es que comienzo la sesión desde un trabajo cron y no puedo adjuntar a la pantalla desde cron.

Pasos para repetir

$ 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 indica presionando Ctrl + un pulsando a continuación d.

Versiones

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

Respuesta

8

Editar: La mejor respuesta a esta pregunta es this other SO answer. De todos modos, dejo mi solución de kludgey, en caso de que inspire una solución a un problema similar.


Una posible solución es utilizar un segundo, ya se está ejecutando y la sesión de pantalla individual para iniciar la sesión de pantalla a la que desea enviar el comando "cosas" en el modo conectado, y luego enviar esa sesión de pantalla de un detach comando y luego el comando cosas.

$ 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" 

(Nota: el duplicado "pantalla" es no un error tipográfico!) Todavía quedan con una sesión de pantalla unstuffable (reproductores), pero si los recursos que se necesitan son importantes siempre puede utilizar "matar -TERM ..." o su clase para terminarlo (o tienen que salir automáticamente después de un cierto período de tiempo, comenzando con algo como

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

o similar).

+0

Muchas gracias, eres increíble! –

+1

Gracias por el estímulo. Olvidé que descubrí ese Tuve que agregar un breve descanso después de crear la sesión de pantalla y su separación a través de -X, para evitar condiciones de carrera. La respuesta ha sido editada para reflejar eso. –

0

Ha considerado el uso tmux en su lugar? Es mucho más adecuado para tareas no interactivas.

+0

que actualmente no tienen instalado tmux pero puedo mirar en él. ¿Hay una guía o lata usted proporciona un ejemplo para lo que necesito? –

+0

'man tmux' prácticamente cubre todo, pero esto debería ser bastante idéntico a lo que desea: http://blog.hawkhost.com/2010/07/02/tmux-% E2% 80% 93-the-terminal-multiplexer-part-2/# tmux-shell-scripting –

-1

Usando el archivo .screenrc, puede configurar las cosas para comenzar;

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

lo tanto, si desea iniciar top7 en la ventana, que haría

screen -t window7top 7 top 
+0

Tu respuesta no es aplicable. –

0

Gracias por Ron Kaminsky.

he encontrado otra manera de matar a la pantalla 'desovador'

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

y añadir debajo de la línea

$ 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

De todos modos, no puedo agregar un comentario a la respuesta de otro tipo. que me pasa a mi :( –

0

pantalla -d -m/bin/"prueba de fiesta.sh"

pantalla (individual) (móvil) (shell) 'Lo que hay que ejecutar'

$ 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. 
Cuestiones relacionadas