Estoy trabajando en la automatización de una rutina de mantenimiento que implica iniciar y detener un script que se ejecuta en una sesión de pantalla. Mi enfoque es matar la sesión de la pantalla, y luego reiniciarla y ejecutar el comando desde un script usando las habilidades para crear una pantalla y pasar un comando sin necesidad de adjuntarlo a la pantalla.
Sin embargo, estoy teniendo dificultades con esto. Puedo crear la pantalla correctamente sin que se adjunte usando screen -d -m -S screen_name
. Sin embargo, si ejecuto un comando basado en:
screen -S screen_name-X stuff "command 1"'echo -ne '\015''"command 2"'echo -ne '\015''
con el eco -ne '\ 015' envuelto con comillas invertidas en lugar de comillas simples. Es para simular al usuario presionando la tecla Intro ya que los comandos que uso se mueven a un directorio y ejecutan un script ubicado allí. Este comando funciona, pero solo si la pantalla se ha adjuntado una vez que se ha creado. Como estoy tratando de automatizar el proceso de creación de la pantalla y ejecutar los comandos dentro de ella, me gustaría evitar tener que adjuntar y desconectar dentro de un script. Intentaré la sugerencia de crear un script de shell que contenga los comandos que necesito ejecutar dentro de la pantalla y editar de acuerdo con mis resultados.
¿Hay alguna manera de crear una pantalla y ejecutar un comando dentro de la pantalla, ya sea en un comando o sin tener que adjuntarlo a la pantalla después de crear, pero antes de ejecutar el comando?
Gracias por adelantado.
** Actualización: después de probar la sugerencia de colocar los comandos que necesito ejecutar dentro de un script de shell, pude crear con éxito una pantalla y ejecutar los comandos desde dentro de la pantalla, pero obtengo el comportamiento que cuando el script deja de ejecutarse la pantalla también se cierra. Esto no debería ser un problema, ya que el script es un script de registro que solo debe detenerse con el conocimiento del administrador del sistema o mediante el script que estoy tratando de desarrollar, sin embargo, sería preferible configurar la pantalla de tal manera que la pantalla no desaparece si se detiene el script. ¿Es posible lograr este comportamiento? ** **
fuente
.screenrc
que contenga la líneazombie kr
, que mantendrá abierta una ventana terminada, y puede presionark
para cerrar el winodw, or
ejecutar el comando en la ventana nuevamente. Tengo esto para mi .screenrc predeterminado.Respuestas:
Creo que puede encontrarse con varios problemas.
Si el comando finaliza antes de volver a adjuntarlo, la pantalla desaparecerá. Puede demostrar esto usando:
Ejecutará el
ls -l
comando, peroscreen -list
no lo mostrará cuando el proceso de la pantalla haya finalizado.Tampoco tengo idea de lo que estás tratando de hacer con estas cosas. Quizás actualizar su pregunta ayudaría, ya que lo que creo que está tratando de hacer es ejecutar múltiples comandos en una sesión de pantalla. Esto debería ser tan simple como:
Si se usan mucho, tal vez debería hacer un script de shell que ejecute solo estos comandos, luego use uno más simple:
fuente
screen -d -m ssh
se separará en la solicitud de contraseña antes de que se realice la sesión.screen -list
. Además, esto no nombra la pantalla como el OP está tratando de hacer.screen -d -m python EventGenerator.py
, lo que funcionó muy bienbash -c "commands"
lugar debash "commands"
Iniciar una pantalla separada
Ejecutar comando en pantalla separada previamente creada
Sí, debe escribir el símbolo Intro para enviar el comando o, de lo contrario, simplemente agregará la cadena a la pantalla.
http://osdir.com/ml/gnu.screen/2003-09/msg00029.html
fuente
stuff
en realidad es un comando que copia y pega otro comando en una sesión de pantalla: stuff [string] Rellena la cadena en el búfer de entrada de la ventana actual. Esto es como el comando "pegar" pero con mucho menos sobrecarga. Sin un parámetro, la pantalla solicitará que se llene una cadena. No puede pegar buffers grandes con el comando "cosas". Es más útil para las combinaciones de teclas. Ver también "bindkey". [Citado de theterminallife.com/sending-commands-into-a-screen-session/]He encontrado este problema antes, era un error con la implementación de cygwin.
Lo que hice fue crear un ".screenrc_detaching" con solo el siguiente comando
y luego inicie la pantalla con
Luego tiene su sesión de pantalla y ya se ha adjuntado y desconectado y puede enviarle comandos.
Fácil! :PAGS
fuente
Esto hizo el trabajo para mí, sin que
-c
no funcionarascreen -d -m bash -c "command1; command2; command3"
fuente
Una forma de copiar y pegar para probar las respuestas anteriores es:
El resultado esperado debería ser similar a:
(Eso significa que no se creó previamente ninguna sesión de pantalla)
(Es el tiempo dedicado a crear una pantalla y desprenderse de ella. Casi instantáneo).
(Esta salida muestra sesiones de pantalla disponibles. Creado con el último comando).
(Esto
cat
muestra el nombre de host ejecutado dentro de gnu-screen)fuente
fuente