Como verificar o status "apt-get upgrade" após perder a conexão ssh?

16

Normalmente, atualizo minha instalação do Ubuntu através de uma conexão ssh. Às vezes, essa conexão ssh seria perdida ou eu fecharia acidentalmente a janela do terminal.

É possível verificar o status da atualização após um ssh voltar a fazer login no computador?

Josema
fonte

Respostas:

33

Os seguintes logs estão relacionados às atualizações do apt:

/var/log/apt/history.log
/var/log/apt/term.log
/var/log/dpkg.log

Se o comando foi dist-upgrade, existem logs adicionais em:

/var/log/dist-upgrade

Para sua informação, geralmente é seguro apenas executar novamente a atualização e o apt continuará de onde parou quando o processo morreu devido à desconexão. Contudo...

Um GNU Screen Primer:

Ao realizar a ssh'ing em um servidor remoto e iniciar um processo de execução demorada em primeiro plano, é uma prática recomendada usar o GNU Screen. A tela fornece um terminal virtual que continua em execução, mesmo se sua conexão ssh for perdida.

Tela de instalação:

sudo apt-get install screen

Executar tela:

screen

Depois de executar a tela, você receberá um prompt de linha de comando como em um terminal normal. Você pode executar a atualização a partir da tela interna:

sudo apt-get upgrade

Para entender como isso funciona, "desanexe" a tela pressionando Ctrl + a, d . Isso o levará ao terminal que não é da tela. Você pode ver a lista de telas em execução com

screen -list

Se você tiver apenas uma tela em execução, poderá anexá-la novamente com:

screen -raAd

(Isso desconecta a tela caso esteja conectada em outro lugar e a reconecta ao terminal em execução no momento.)

Normalmente, você não pode rolar 'normalmente' da tela sem alguma configuração extra. Para rolar pela tela, pressione Ctrl-Esc para entrar no modo cursor. Você pode rolar para baixo e para cima com j e k . Pressione Esc novamente para sair do modo cursor.

Existem muitos recursos na rede disponíveis para funções adicionais da tela. É uma ferramenta padrão inestimável para administração do sistema.

Veja também:

doublerebel
fonte
2
+1 voor realmente responder a pergunta e mencionando tela :)
Nanne
2
Além disso, screen -x- conecte-se à tela em execução sem desconectar outras pessoas, tornando a sessão na tela "multiplayer".
SF.
Isso é útil, mas inclui prevenção além da resposta. Além disso, o log correto a ser tail -fobservado é citado, mas um usuário iniciante pode não estar familiarizado com a opção de comando e sinalizador, que permitirá ao usuário observar o progresso em tempo real (ou ver que ele travou) após "re Conecte-se." Eu sei que é antigo e aceito, mas acho que a cauda deve ser adicionada a esse conjunto de instruções, porque, na falta desses detalhes, a resposta abaixo de @TheAnonymousBear é mais direta e direta. @doublerebel
oemb1905
10

Além da resposta de doublerebel, notei uma alternativa hoje.

Fui para a cama ontem à noite depois de iniciar uma atualização sobre o SSH. Eu estupidamente esqueci de iniciá-lo screene perdi minha sessão SSH durante a noite.

Eu estava prestes a começar a pesquisar rettyquando percebi que roothavia iniciado uma screensessão.

me@GAMMA:~$ ps aux | grep -E 'release|upgrade|apt'
root      6208  0.0  0.0  29140  1628 ?        Ss   01:57   0:05 SCREEN -e \0\0 -L -c screenrc -S ubuntu-release-upgrade-screen-window /tmp/ubuntu-release-upgrader-1h6_g4/raring --mode=server --frontend=DistUpgradeViewText
root      6209  0.2  5.6 287428 93144 pts/2    Ss+  01:57   3:13 /usr/bin/python /tmp/ubuntu-release-upgrader-1h6_g4/raring --mode=server --frontend=DistUpgradeViewText
root      6239  0.0  0.0  50052  1184 ?        Ss   01:58   0:00 /usr/sbin/sshd -o PidFile=/var/run/release-upgrader-sshd.pid -p 1022
root      7306  0.0  4.6 287432 77284 pts/2    S+   02:43   0:08 /usr/bin/python /tmp/ubuntu-release-upgrader-1h6_g4/raring --mode=server --frontend=DistUpgradeViewText
me       26829  0.0  0.0   9440   956 pts/5    S+   22:18   0:00 grep --color=auto -E release|upgrade|apt

Então, listei rootas telas e anexei a ela:

me@GAMMA:~$ sudo screen -list
There is a screen on:
        6208.ubuntu-release-upgrade-screen-window       (12/11/2013 01:57:58 AM)        (Detached)
1 Socket in /var/run/screen/S-root.
me@GAMMA:~$ sudo screen -x -r

E Bam! Eu estava de volta ao jogo.

Huckle
fonte
Eu pensei que você tinha esquecido de começar a tela. Como a tela estava funcionando se você "esqueceu de começar na tela?"
oemb1905
11
@ oemb1905 Porque Ubuntu começa um para você, sob a suposição de que você vai esquecer :)
Huckle
interessante, isso é com o do-release-upgradecomando específico para o ubuntu? Nunca tive a necessidade de verificar o Debian, que uso exclusivamente, porque sempre o executo manualmente, desanexo e volto. E, é claro, usamos sudo apt dist-upgradedepois de mudar /etc/apt/sources.list.
#
Eu encontrei, sim, isso é específico do Ubuntu, portanto, qualquer pessoa pura do Debian como eu que faça correções ilegais no AskUbuntu não deve assumir que isso acontecerá em seus sistemas. Tópico original sobre este tópico: serverfault.com/questions/387547/…
oemb1905 07/07/19
Como ele sabe que você terá a tela instalada?
Nacht - Restabelece Monica
4

Para ver a saída em tempo real do apttrabalho em segundo plano , use:

sudo tail -f /var/log/apt/term.log
TheAnonymousBear
fonte
Esta é a resposta correta - a resposta acima apenas indica a localização de alguns logs úteis e muda para prevenção. Esta resposta mostra ao usuário onde procurar e como vê-lo ( tail) após o que eles chamaram de "re-login".
oemb1905
0

Teve exatamente o mesmo problema, perdi minha conexão e o processo dpkg estava aguardando a entrada.

Talvez da próxima vez tente: sudo dpkg --configure -a

Sebastian Faujour
fonte
11
Quando eu tento isso, tudo o que eu vejo é,"dpkg: error: dpkg frontend is locked by another process"
CivMeierFan
Eu fiz um grep de contexto para ver que, felizmente, era um subprocesso que gerava um diálogo de mensagens aguardando entrada, então eu pude simplesmente matá-lo sem interromper todo o processo de atualização do apt.
CivMeierFan
Essa abordagem ignora a investigação sobre se o processo dpkg ainda está em execução no sistema após o logon. Além disso, se estiver em execução, isso pode ser potencialmente prejudicial, na pior das hipóteses, ou apenas uma má prática, na melhor das hipóteses, pois o dpkg terá um bloqueio nele /var/dpkg/lockse ainda estiver em execução. E, independentemente disso, ele não responde à pergunta de como "verificar o status da atualização" e, em vez disso, funcionará apenas se a atualização falhar (e somente se o bloqueio não estiver ativo). Eu não recomendaria essa abordagem a ninguém. Respeitosamente, oemb1905
oemb1905 06/07/19