失去ssh连接后如何检查“ apt-get upgrade”状态?


16

通常,我通过ssh连接升级Ubuntu安装。有时,此ssh连接将会丢失,或者我会不小心关闭终端窗口。

ssh重新登录到计算机后,是否可以检查升级状态?

Answers:


33

以下日志与apt升级有关:

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

如果命令是dist-upgrade,则还有其他日志:

/var/log/dist-upgrade

仅供参考,通常重新运行升级是安全的,并且在由于断开连接而导致进程终止时,apt将继续从中断处继续。然而...

GNU屏幕入门:

切换到远程服务器并在前台启动长时间运行的进程时,最佳实践是使用GNU屏幕。屏幕提供了一个虚拟终端,即使您的ssh连接丢失,该终端也可以继续运行。

安装屏幕:

sudo apt-get install screen

运行屏幕:

screen

运行屏幕后,您将获得与普通终端一样的命令行提示符。然后,您可以从屏幕内部运行升级:

sudo apt-get upgrade

要了解其工作原理,请按Ctrl + a,d来 “分离”屏幕。这将使您返回到非屏幕终端。您可以通过以下方式查看正在运行的屏幕列表

screen -list

如果仅运行一个屏幕,则可以使用以下方法重新连接它:

screen -raAd

(如果屏幕已连接到其他位置,则会分离屏幕,然后将其重新连接到您当前正在运行的终端。)

通常,如果不进行一些额外的设置,您将无法从屏幕上“正常”滚动。要在屏幕内滚动,请按Ctrl-Esc进入光标模式。然后可以使用jk上下滚动。再次按Esc退出光标模式。

网上有更多资源可用于其他屏幕功能。它是系统管理的宝贵标准工具。

也可以看看:


2
+1回答问题并提及屏幕:)
Nanne 2012年

2
此外,screen -x-附加到运行屏幕而不分离其他屏幕,使屏幕会话成为“多人游戏”。
SF。

这是有帮助的,但除了答案外,还包括预防措施。而且,引用了要查看的正确日志,但是初学者可能不熟悉tail -fcommand and flag选项,这将允许用户在“重新执行以下操作”后实时观察进度(或看到崩溃)。登录。” 我知道它已被接受并且已经过时,但是我认为应该在该指令集中添加尾号,因为在缺乏细节的情况下,@ TheAnonymousBear给出的答案更加直接和明确。@doublerebel
oemb1905 '19

通常sudo dpkg --configure -a仍会继续进行适当的升级,而这仍在花费中。
危险89

10

除了doublerebel的答案外,我今天还注意到了另一种选择。

我昨天晚上开始通过SSH升级后上床睡觉。我愚蠢地忘记了启动它,screen并在一夜之间丢失了SSH会话。

retty当我注意到它root已经开始一个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

因此,我列出了root的屏幕并附加到它:

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

班!我又回到了比赛中。


我以为你忘了开始播放屏幕。如果您“忘记在屏幕中启动”,屏幕如何运行?
oemb1905

1
@ oemb1905因为Ubuntu会为您启动一个,所以您会忘记:)
Huckle

有趣,这是do-release-upgrade特定于ubuntu 的命令吗?我从来不需要检查我专用的Debian,因为我总是手动运行它,分离然后再回来。而且,当然,我们sudo apt dist-upgrade在更改后使用/etc/apt/sources.list
oemb1905 '19

我发现了,是的,这是特定于Ubuntu的,因此像我这样的纯正Debian专家从AskUbuntu处盗窃程序后,不应以为这会在他们的系统上发生。关于该主题的原始主题: serverfault.com/questions/387547/…–
oemb1905

它怎么知道您将安装屏幕?
Nacht-恢复莫妮卡

4

要查看后台apt作业的实时输出,请使用:

sudo tail -f /var/log/apt/term.log

这是正确的答案-上面的答案仅说明了一些有用日志的位置,然后切换到预防措施。该答案向用户显示了在哪里,以及tail他们所谓的“重新登录”后如何看待它()。
oemb1905 '19

0

发生了完全相同的问题,失去了连接,并且dpkg进程正在等待输入。

也许下次尝试: sudo dpkg --configure -a


1
当我尝试这样做时,我所得到的只是"dpkg: error: dpkg frontend is locked by another process"
CivMeierFan

我做了一个上下文grep,以庆幸的是它是一个生成消息对话框等待输入的子进程,因此我能够杀死它而不会杀死整个apt升级过程。
CivMeierFan

这种方法忽略了重新登录后是否仍在系统上运行dpkg进程的调查。而且,如果它正在运行,那么这可能在最坏的情况下可能有害,或者在最好的情况下只是不好的做法,因为如果dpkg /var/dpkg/lock仍在运行,它将锁定它。而且无论如何,它都不能回答如何“检查升级状态”的问题,而是仅在升级崩溃时才起作用(并且只有在锁未激活时才起作用)。我不会向任何人推荐这种方法。尊敬的oemb1905
oemb1905 '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.