Comment vérifier l'état "apt-get upgrade" après avoir perdu la connexion ssh?

16

Habituellement, je mets à niveau mon installation Ubuntu via une connexion ssh. Parfois, cette connexion ssh était perdue ou je fermais accidentellement la fenêtre du terminal.

Il est possible de vérifier l'état de la mise à niveau après une reconnexion ssh à l'ordinateur?

Josema
la source

Réponses:

33

Les journaux suivants sont liés aux mises à niveau apt:

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

Si la commande était dist-upgrade, il existe des journaux supplémentaires:

/var/log/dist-upgrade

Pour info, il est généralement sûr de simplement relancer la mise à niveau et apt continuera là où il s'était arrêté lorsque le processus est mort en raison de la déconnexion. Pourtant...

Une introduction à l'écran GNU:

Lors de la connexion à un serveur distant et du démarrage d'un processus de longue durée au premier plan, il est recommandé d'utiliser GNU Screen. L'écran fournit un terminal virtuel qui continue de fonctionner même si votre connexion ssh est perdue.

Écran d'installation:

sudo apt-get install screen

Écran d'exécution:

screen

Après avoir exécuté l'écran, vous obtiendrez une invite de ligne de commande comme avec un terminal normal. Vous pouvez ensuite exécuter la mise à niveau depuis l'écran intérieur:

sudo apt-get upgrade

Pour comprendre comment cela fonctionne, "détachez" l'écran en appuyant sur Ctrl + a, d . Cela vous ramènera au terminal sans écran. Vous pouvez voir la liste des écrans en cours d'exécution avec

screen -list

Si vous n'avez qu'un seul écran en cours d'exécution, vous pouvez le rattacher avec:

screen -raAd

(Cela détache l'écran au cas où il serait attaché ailleurs et le rattache au terminal que vous utilisez actuellement.)

En règle générale, vous ne pouvez pas faire défiler «normalement» depuis l'écran sans une configuration supplémentaire. Pour faire défiler l'écran, appuyez sur Ctrl-Esc pour entrer en mode curseur. Vous pouvez ensuite faire défiler vers le haut et le bas avec j et k . Appuyez à nouveau sur Esc pour quitter le mode curseur.

Il existe de nombreuses autres ressources sur le net disponibles pour des fonctions d'écran supplémentaires. Il s'agit d'un outil standard inestimable pour l'administration du système.

Voir également:

doublerebel
la source
2
+1 pour répondre réellement à la question ET mentionner l'écran :)
Nanne
2
En outre, screen -x- attachez-vous à l'écran en cours d'exécution sans en détacher d'autres, ce qui rend la session d'écran "multijoueur".
SF.
Ceci est utile, mais inclut la prévention en plus de la réponse. En outre, le journal correct à consulter est cité, mais un utilisateur débutant peut ne pas être familier avec l' tail -foption de commande et d'indicateur, qui permettra à l'utilisateur d'observer la progression en temps réel (ou de voir qu'il s'est écrasé) lors de la s'identifier." Je connais son ancien et accepté, mais je pense que la queue devrait être ajoutée à ce jeu d'instructions, car en l'absence de ce détail, la réponse ci-dessous par @TheAnonymousBear est plus directe et directe. @doublerebel
oemb1905
Souvent sudo dpkg --configure -a, continuera la mise à niveau apt, alors que cela était encore dépensé.
danger89
10

En plus de la réponse de doublerebel, j'ai remarqué une alternative aujourd'hui.

Je me suis couché la nuit dernière après avoir commencé une mise à niveau via SSH. J'ai bêtement oublié de le démarrer screenet j'ai perdu ma session SSH pendant la nuit.

J'étais sur le point de commencer rettymes recherches lorsque j'ai remarqué que la session rootavait commencé screen.

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

J'ai donc listé rootles écrans et je les ai joints:

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

Et Bam! J'étais de retour dans le match.

Huckle
la source
Je pensais que tu avais oublié de démarrer l'écran. Comment l'écran fonctionnait-il si vous "oubliez de démarrer à l'écran?"
oemb1905
1
@ oemb1905 Parce qu'Ubuntu en démarre un pour vous, en supposant que vous oublierez :)
Huckle
intéressant, est-ce avec la do-release-upgradecommande spécifique à ubuntu? Je n'ai jamais eu besoin de vérifier Debian, que j'utilise exclusivement, car je l'exécute toujours manuellement, je détache puis je reviens. Et, bien sûr, nous utilisons sudo apt dist-upgradeà la /etc/apt/sources.listplace après avoir changé .
oemb1905
Je l'ai trouvé, oui, c'est spécifique à Ubuntu, donc tous les purs Debian comme moi que les correctifs de braconnage d'AskUbuntu ne devraient pas supposer que cela se produira sur leurs systèmes. Discussion originale sur ce sujet: serverfault.com/questions/387547/…
oemb1905
Comment sait-on que l'écran sera installé?
Nacht - Reinstate Monica
4

Pour voir la sortie en temps réel du apttravail d' arrière-plan , utilisez:

sudo tail -f /var/log/apt/term.log
TheAnonymousBear
la source
Ceci est la bonne réponse - la réponse ci-dessus indique simplement l'emplacement de certains journaux utiles, puis passe à la prévention. Cette réponse montre à l'utilisateur où chercher et comment le regarder ( tail) après ce qu'il a appelé une "reconnexion".
oemb1905
0

A exactement le même problème, a perdu ma connexion et le processus dpkg attendait une entrée.

Peut-être la prochaine fois, essayez: sudo dpkg --configure -a

Sebastian Faujour
la source
1
Quand j'essaye, tout ce que je reçois est,"dpkg: error: dpkg frontend is locked by another process"
CivMeierFan
J'ai fait un grep de contexte pour voir que, heureusement, c'était un sous-processus qui a généré une boîte de dialogue de message en attente d'entrée, j'ai donc pu tuer cela sans tuer tout le processus de mise à niveau d'apt.
CivMeierFan
Cette approche ignore les recherches visant à déterminer si le processus dpkg est toujours en cours d'exécution sur le système lors de la reconnexion. De plus, s'il est en cours d'exécution, cela pourrait être au pire potentiellement dangereux ou tout simplement de mauvaises pratiques, car dpkg aura un verrou /var/dpkg/locks'il est toujours en cours d'exécution. Et quoi qu'il en soit, il ne répond pas à la question de savoir comment "vérifier l'état de la mise à niveau" et, à la place, ne fonctionnera que si la mise à niveau s'est écrasée (et seulement si le verrou n'est pas actif). Je ne recommanderais cette approche à personne. Respectueusement, oemb1905
oemb1905