
Esta es una situación extraña con la que me he topado. Tenemos un servidor de prueba fuera del sitio (o fuera del sitio donde trabajo). Para acceder al servidor, necesito una VPN en su red.
Ejecuté la pantalla para ejecutar un proceso de larga duración. Después de comenzar el proceso, hice lo siguiente para verificar la viabilidad de la pantalla:
- Me despegué de la sesión
- pantalla realizada -ls para verificar el PID
- ps -ef | pantalla grep
- pantalla -r PID
Pude ver que había una sesión de pantalla después de ejecutar estos comandos y volver a conectar/desconectar la sesión.
Aquí está la parte rara. Vuelvo al día siguiente y no hay sesiones de pantalla. Ejecuté esos cmds anteriores para verificar pero no hay nada. Sin embargo, mi proceso todavía está en ejecución. No utilicé nohup para ejecutar mi proceso pero, por alguna razón afortunada, mi proceso no murió con la sesión.
¿Alguien sabe qué pudo haber pasado? ¿Por qué perdí mi sesión de pantalla y por qué tuve suerte y mi proceso siguió ejecutándose?
Gracias por cualquier iluminación. =)
Respuesta1
Es posible que desee buscar para SCREEN
verificar que su pantalla realmente no se esté ejecutando.
Algunos sistemas tienen limpiadores tmp que eliminan archivos en /tmp
, /var/tmp
, /var/run
o similares. Esto puede provocar que screen
no pueda encontrar sus archivos de socket. Si puede identificar el PID de su sesión, puede kill -CHLD <PID>
indicarle screen
que reescriba su archivo de socket. screen -r
Entonces debería funcionar de nuevo.
Si esto es lo que sucede, probablemente debería configurarlo screen
para usar otro directorio para sus sockets.
Respuesta2
Esto nos volvió a pasar a mí y a mi compañero de trabajo recientemente y él propuso esto como una posible razón por la cual sucedió. Él cree que debido a que la compañía agota el tiempo de nuestra conexión, la pantalla se apaga.
Teníamos varias sesiones de pantalla ejecutándose, cada una con su propio trabajo de larga duración (para simplificar, las llamaremos sesión A y B). El trabajo en la sesión A terminó antes y esa sesión volvió al indicador. Cuando transcurrió el período de tiempo de espera debido a inactividad, nos desconectó de la sesión A. La sesión B todavía está ejecutando su trabajo cuando esto sucedió, pero creemos que cuando el proceso principal muere (en este caso, la pantalla), se lleva todas las sesiones.
El proceso que se estaba ejecutando en la sesión B ahora lo hereda el padre de la pantalla, que es el proceso de inicio o proceso 1 y, por lo tanto, continúa ejecutándose cuando verificamos a la mañana siguiente.
Esta hipótesis fue respaldada en cierto modo mediante la realización de un experimento. Esto se ejecutó en Centos. Empezamos la pantalla y abrimos dos sesiones. En una sesión ejecutamos periódicamente un cmd para mantenerlo vivo. Al otro lo ignoramos. Después de unos 10 minutos, la pantalla terminó y con ella, ambas sesiones que abrimos.