Ubuntu cierra la terminal de Gnome durante la noche

3

Solía ​​ejecutar un programa Perl TCP Socket 24 * 7 en mi servidor UBUNTU. Por lo general, abría el terminal Gnome e iba a la ruta del script y comenzaba el script de Perl. La terminal de Gnome permanece abierta en todo momento. Funcionó bien durante 6 meses. Pero durante los últimos tres días, no funciona correctamente. El terminal Gnome se cierra automáticamente y, por lo tanto, el programa Socket. Al día siguiente, por la mañana, volví a abrir el terminal y ejecuté el programa de socket, luego nuevamente el terminal se cerró durante la noche. No pude encontrar ninguna solución en la web. Necesita ayuda para resolver el problema

gzix
fuente
3
El "servidor Ubuntu" no tiene un "terminal Gnome" ;-) Elimina la necesidad de un terminal: ¿iniciar el programa en segundo plano? ( nohup {command} &) haría eso. ¿O usar un ttty diferente? Por cierto: Ubuntu probablemente no lo cierre por sí solo. Probablemente necesite averiguar por qué, podría ser un bloqueo o un problema con su programa perl
Rinzwind
1
Haga que su programa de servidor perl escriba un mensaje "aún vivo" + marca de tiempo en un archivo de registro. Luego, a la mañana siguiente, vea si el momento de la muerte se correlaciona con algo parecido cron_dailyo cualquier otra cosa /var/log.
Jos
Buenas respuestas para solucionar esto; también es posible que desee verificar si TMOUT está configurado (echo $ TMOUT; si vuelve no vacío, podría ser la razón por la cual su terminal se cierra durante la noche)
Foon
¿Realmente estás ejecutando gnome-terminal en el servidor, en Ubuntu 12.04? Durante los últimos 2 años hemos solucionado muchos errores (incluidos bloqueos) en gnome-terminal (y su widget vte subyacente). 12.04 es un sistema bastante antiguo, le recomiendo que actualice a 16.04 poco después de su lanzamiento (todavía lo sé dentro de más de medio año); o use 15.04 / 15.10 en su estación de trabajo, ejecute gnome-terminal allí y ssh al servidor. Alternativamente, puede ejecutar su aplicación dentro de la pantalla o en un emulador de terminal diferente.
egmont
¿Cómo es la aplicación que estás ejecutando? ¿Produce lotes (como realmente lotes, gigabytes) de salida? ¿Puede producir potencialmente material binario no imprimible? ¿Qué tan grande es su búfer de desplazamiento hacia atrás? ¿Puedes intentar disminuir eso? ¿Cuánta memoria y espacio libre en disco tiene? ¿Puede haber algún mensaje del asesino OOM del núcleo en dmesgla salida o en los registros del sistema?
egmont

Respuestas:

5

Ejecute su programa en la pantalla . Simplemente instale la pantalla, abra su terminal y escriba "pantalla". A partir de ese momento, todo lo que haga estará dentro de una 'pantalla' persistente que no depende de si el caparazón externo está cerrado.

Si su terminal está cerrada, puede abrir una nueva y volver a conectar la pantalla.

Si escribo programas que necesitan ejecutarse de esta manera (generalmente los iniciaré de forma remota a través de ssh), generalmente escribo un cheque, de modo que el programa se niega a iniciarse a menos que se esté ejecutando en la pantalla (verifique si existe la variable de entorno STY). De esa manera no puedo ejecutar accidentalmente el programa fuera de la pantalla.

Peter
fuente
Oh sí, ese es otro buen método :-D
Rinzwind
2
Para volver a conectar a una sesión de pantalla existente, use screen -r. (Además, le screen -xpermite adjuntar a una sesión a la que ya está conectada otra terminal)
immibis
pantalla de instalación de sudo apt-get
mchid
5

Es posible iniciar el programa en segundo plano (su script podría necesitar alguna alteración si no es posible) con ...

nohup {program} > {program.out} 2>&1 & 

La salida del programa se redirigirá a {program.out}. Si cambia ">" a ">>", agregará la salida en lugar de escribir sobre la vez anterior en que se utilizó.

Eso eliminaría la necesidad de una sesión terminal. Además de eso, también atrapará los mensajes de error que podría haber perdido debido a que la sesión del terminal se mató / detuvo.

Rinzwind
fuente
Puedo ejecutar el script con éxito en segundo plano. Pero mientras se mata el proceso, el zócalo no se cierra. Si aplico el comando sudo netstat -peanut | grep ': 1008' Estoy obteniendo el PID. Pero si trato de matar PID, sigue cambiando y el socket no se cierra. Lo mismo no sucede, mientras se abre y cierra con terminales. Creo que me gustaría crear una pregunta separada para este asunto.
gzix
3

Presione CTRL+ ALT+ F2e inicie sesión con su nombre de usuario y contraseña.

Ejecute el comando desde allí y no debería cerrarse.

mchid
fuente
Aunque esta es la técnica más simple y confiable, la pantalla parece bastante genial de usar.
gzix