
Esta é uma situação estranha que encontrei. Temos um servidor de teste fora do local (ou fora do local onde trabalho). Para acessar o servidor, preciso fazer uma VPN em sua rede.
Executei screen para executar um processo de longa execução. Depois de iniciar o processo, fiz o seguinte para verificar a viabilidade da tela:
- Me desliguei da sessão
- executei screen -ls para verificar o PID
- ps -ef | tela grep
- tela -r PID
Pude ver que houve uma sessão de tela depois de executar esses comandos e reconectar/desconectar da sessão.
Aqui está a parte estranha. Volto no dia seguinte e não há sessões de tela. Executei os cmds acima para verificar, mas não há nada. No entanto, meu processo ainda está em execução. Não usei nohup para executar meu processo, mas por algum motivo de sorte, meu processo não morreu com a sessão.
Alguém sabe o que pode ter acontecido? Por que perdi minha sessão de tela e por que tive sorte e meu processo continuou em execução?
Obrigado por qualquer esclarecimento. =)
Responder1
Você pode querer usar o grep para SCREEN
verificar se sua tela realmente não está funcionando.
Alguns sistemas possuem limpadores tmp que excluem arquivos em /tmp
, /var/tmp
, /var/run
ou similares. Isso pode resultar na screen
impossibilidade de encontrar seus arquivos de soquete. Se você conseguir identificar o PID da sua sessão, poderá kill -CHLD <PID>
reescrever screen
seu arquivo de soquete. screen -r
deve então funcionar novamente.
Se é isso que está acontecendo, você provavelmente deve configurar screen
para usar outro diretório para seus soquetes.
Responder2
Isso aconteceu comigo e com meu colega de trabalho novamente recentemente e ele propôs isso como uma possível razão para isso ter acontecido. Ele acha que devido ao tempo limite da nossa conexão, isso mata a tela.
Tivemos várias sessões de tela em execução, cada uma com seu próprio trabalho de longa execução (para simplificar, chamaremos de sessão A e B). O trabalho na sessão A terminou mais cedo e essa sessão retornou ao prompt. Quando o período de tempo limite expirou devido à inatividade, ele nos desconectou da sessão A. A sessão B ainda estava executando seu trabalho quando isso aconteceu, mas achamos que quando o processo pai morre (neste caso, a tela), ele leva consigo todas as sessões.
O processo que estava em execução na Sessão B agora é herdado pelo pai da tela, que é o processo init ou processo 1 e, portanto, continua em execução quando verificamos na manhã seguinte.
Essa hipótese foi apoiada pela realização de um experimento. Isso foi executado no Centos. Iniciamos a tela e abrimos duas sessões. Em uma sessão, executamos periodicamente um cmd para mantê-lo ativo. O outro nós ignoramos. Depois de uns 10 minutos, a tela foi encerrada e com ela, as duas sessões que abrimos.