如何在Linux系统中恢复未完成的作业? (linux 恢复作业)

Linux 是一种自由和开放源代码的操作系统,拥有较高的安全性、可靠性和灵活性。在使用 Linux 过程中,我们可能会遇到突然断电、程序异常退出等问题导致未完成的作业丢失,这给工作和学习带来了不便。为此,本文将介绍如何在 Linux 系统中恢复未完成的作业。

1. 使用 GNU Screen

GNU Screen 是一款终端会话管理器,用于保存会话或会话组。它类似于窗口彬、tmux 等工具,但在功能上更为强大。当突然停电或程序崩溃导致作业中断时,可以使用 GNU Screen 将完成的作业储存在后台,并在之后的操作中恢复。

可以通过以下命令创建一个新的 Screen 会话:

“`

$ screen

“`

该命令将会打开一个新的终端会话,并进入 Screen 内部环境。在这个环境中,你可以在后台进程中执行任务,同时终端关闭后,任务还会在后台继续运行。

如果要将已经启动的程序移到 GNU Screen 后台继续运行,可以在程序运行时按下 Ctrl+A,然后按下 D 键即可分离当前的 Screen 会话。分离后,后台程序会在 GNU Screen 中继续运行。

接下来,我们只需要使用以下命令重新连接到之前的会话,即可恢复未完成的程序:

“`

$ screen -r

“`

该命令将重新连接到 GNU Screen 会话,并恢复未完成的作业。在此过程中,所有已经配置的变量和环境设置都将被保留。

2. 使用 nohup 命令

Nohup(No Hang Up)是一个Linux命令,在终端中使用nohup命令可以在后台启动作业,并且把作业从当前 Shell 的环境中脱离,这样当用户注销之后,作业仍然在后台运行。它与GNU Screen类似,但更适用于临时作业和简单任务。

使用 nohup 命令可以将某个命令或脚本放置到后台进程中,并确保在程序异常退出或系统重启后,作业仍可以继续运行。

以下是一个示例,假设你需要执行 /path/to/your/script.sh 脚本:

“`

$ nohup /path/to/your/script.sh &

“`

该命令将脚本放置到后台,并使用 nohup 命令防止脚本的运行被打断。

如果已经在后台运行某个作业,可以在需要恢复时使用以下命令重新连接到该作业:

“`

$ nohup &

“`

可以看到,nohup 命令使用简便,适用于简单的任务。但对于长时间运行、需要更新输出和接收输入的作业来说,还是 GNU Screen 更为合适。

3. 使用 Foreground 命令

Foreground 命令可以将已经在后台运行的任务恢复到前台。使用该命令的前提是,作业必须在后台运行。

可以通过以下命令在终端中查找已经在后台运行的任务:

“`

$ jobs

“`

找到需要恢复的作业后,可以使用 fg 命令将其恢复到前台:

“`

$ fg %n

“`

其中,n 表示你要恢复的作业的标识符。可以通过 jobs 命令查看标识符。该命令执行后,原本在后台运行的任务就会转移到前台并重新运行。

相关问题拓展阅读:

在LINUX中,用Ctrl+z挂起的命令怎么切回到原任务的命令窗口?

命令运行时使用CTRL+Z,强制当前进程转为后台,并使之挂起(暂停).

  1. 使进程恢复运行(后台)

  (1)使用命令bg

  Example:

  zuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv01

  *这里使用CTRL+Z,此时serv01是橡旦停止状态*

  + Stopped ./tcpserv01

  zuii@zuii-desktop:~/unp/tcpcliserv$ bg

  + ./tcpserv01 & *此时serv01运行在后台*

  zuii@zuii-desktop:~/unp/tcpcliserv$

  (2)如果用CTRL+Z停止了几个程序呢?

  Example:

  zuii@zuii-desktop:~/unp/tcpcliserv$ jobs

  - Running ./tcpserv01 &

  + Stopped ./tcpcli01 127.0.0.1

  zuii@zuii-desktop:~/unp/tcpcliserv$ bg %1

  bash: bg:任务 1 已转入后台 *后橡如告台运行*

  2. 使进梁明程恢复至前台运行

  Example:

  zuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv04

  + Stopped ./tcpserv04

  zuii@zuii-desktop:~/unp/tcpcliserv$ fg

  ./tcpserv04

  总结:

  (1) CTRL+Z挂起进程并放入后台

  (2) jobs 显示当前暂停的进程

  (3) bg %N 使第N个任务在后台运行(%前有空格)

  (4) fg %N 使第N个任务在前台运行

  默认bg,fg不带%N时表示对最后一个进程操作!

注意:千万不要exit或Ctrl+d,断开服务器连接腔手后,纤圆磨就无法再次使用fg命毁斗令把后台运行转为前台运行了,因为输入jobs命令就不会显示后台运行的任务了,但这个进程还活着。

jobs 查看当前后台任务 可以获得任腔碧务的索引

bg %x 后台伍启举运行索引为x的任务

fg %x 前台旁升运行索引为x的任务

Linux不能正常启动了,怎么办?

对于使用Linux的人来说,迟早都可能在某一阶段遇到这个问题:你正在兴高采烈得探索你的系统,调整,优化以挖掘其更大的潜力,突然,omg,你发现,系统不能启动了!如果你之前已经习惯了使用Windows系统,我打赌,这是一个经常性的问题,而你最初闪出的念头就是格式化并重装系统。而对于Linux而言,重装系统绝对是最后的选择,只有在我们其它努力都作废之后,才需要考虑这一点。我个人认为,唯一能让人不得不重装系统的情况就是,不幸的你以root身份敲下了森雹不幸的命令rm -rf /。恩,千万别模仿!虽然你可以通过“ctrl c”来终止这该死的自杀操作。  对于Linux,一旦出现无法启动系统情况的时候,也许你知道错误大概出在哪里,有比较明确的修复方向,比如调整屏幕分辨率,或者修改某个脚本,等等。但是,现在问题的关键,是需要能够启动或者访问Linux系统,这样才能修复它。下面就是一些应急措施的介绍。  更先应该想到,也许也是最简单的办法,就是当boot loader—通常都是grub—开始执行时,通过它调整系统运行级别。在出现菜单项后,按下键盘上的“e”按键,这样,菜单项能显示一个或者多个启动命令,找到有关内核的这一行,将光标移到上面,高亮这一行,再按下“e”,grub就会将这行内容用一个简单的编辑器环境打开,让我们能够对其做出改变。那么,到底怎么改变呢?很简单,只需要告诉init程序,我们希望通过那个级别启动即可。在内核命令行的最后加上“init X”参数,其中X表示你所希望的运行级别,举个实际例子模慎,如果你判断可能是因为显卡驱动或者分辨率导致的启动错误,就可以启动到命令行模式来修复它,那么,就应该把运行级别改为纯命令行模式,假设是4,改动后的内核命令行就应该是类似于这样的。  /boot/vmlinuz-2.6.17-11-generic root=UUID=5ccd-4cd0-abb2-74a132efbd7c ro vga=794 quiet splash init 4  这样,就等于告诉了init程序,我要以运行级别4启动,而不是默认的运行级别。  如果这些招数都无法奏效了,怎么办?难道我们就坐以待毙了?no。这里还有一个偏门可以供你使用。我们知道,在默认情况下,内此码帆核启动时会执行init程序,但是你可以指定不同的程序让内核来执行,只需要在后面添加参数“init=/some/program”即可。“/some/program”通常表示诸如/bin/bash或者/bin/sh这种shell程序。注意这里的等于符号,它的作用是告诉内核,你别启动init程序了,而是启动我等号后面所指定的任意程序吧。大体命令行如下:  /boot/vmlinuz-2.6.17-11-generic root=UUID=5ccd-4cd0-abb2-74a132efbd7c ro vga=794 quiet splash init=/bin/bash  这样,你就可以直接启动到所指定的shell中,对发生的错误进行分析,修复等操作。  如果这样做都还是不行……好吧,我觉得你人品有问题!那么,还是拿出恢复cd,通常就是你的安装光盘,它允许你在启动时选择是否进入rescue修复模式。进入这个模式之后,他会自动找到你的硬盘安装的系统,并将它们挂载到一个临时目录下,这样,你就能进行修改配置文件或者其它修复操作了。  如果还是不行呢?恭喜你,回到Windows时代,还是老老实实重新安装吧。

对于使用Linux的人来说,迟早都可能在某一阶段遇到这个问题:你正在兴高采烈得探索你的系统,调整,优化以挖掘其更大的潜力,突然,omg,你发现,系统不能启动了!如果你之前已经习惯了使用Windows系统,我打赌,这是一个经常性的问题,而你最初闪出的念头就是格式化并重装系统。而对于Linux而言,重装系统绝对是最后的选择,只有在我们其它努力都作废之后,才需要考虑这一点。我个人认为,唯一能让人不得不重装系统的情况就是,不幸的你以root身份敲下了不幸的命令rm -rf /。恩,千万别模仿!虽然你贺困可以通过“ctrl c”来终止这该死的自杀操作。

对于Linux,一旦出现无法启动系统情况的时候,也许你知道错误大概出在哪里,有比较明确的伍此修复方向,比如调整屏幕分辨率,或者修改某个脚本,等等。但是,现在问题的关键,是需要能够启动或者访问Linux系统,这样才能修复它。下面就是一些应急措施的介绍。

更先应该想禅橘念到,也许也是最简单的办法,就是当boot loader—通常都是grub—开始执行时,通过它调整系统运行级别。在出现菜单项后,按下键盘上的“e”按键,这样,菜单项能显示一个或者多个启动命令,找到有关内核的这一行,将光标移到上面,高亮这一行,再按下“e”,grub就会将这行内容用一个简单的编辑器环境打开,让我们能够对其做出改变。那么,到底怎么改变呢?很简单,只需要告诉init程序,我们希望通过那个级别启动即可。在内核命令行的最后加上“init X”参数,其中X表示你所希望的运行级别,举个实际例子,如果你判断可能是因为显卡驱动或者分辨率导致的启动错误,就可以启动到命令行模式来修复它,那么,就应该把运行级别改为纯命令行模式,假设是4,改动后的内核命令行就应该是类似于这样的。

/boot/vmlinuz-2.6.17-11-generic root=UUID=5ccd-4cd0-abb2-74a132efbd7c ro vga=794 quiet splash init 4

这样,就等于告诉了init程序,我要以运行级别4启动,而不是默认的运行级别。

如果这些招数都无法奏效了,怎么办?难道我们就坐以待毙了?no。这里还有一个偏门可以供你使用。我们知道,在默认情况下,内核启动时会执行init程序,但是你可以指定不同的程序让内核来执行,只需要在后面添加参数“init=/some/program”即可。“/some/program”通常表示诸如/bin/bash或者/bin/sh这种shell程序。注意这里的等于符号,它的作用是告诉内核,你别启动init程序了,而是启动我等号后面所指定的任意程序吧。大体命令行如下:

/boot/vmlinuz-2.6.17-11-generic root=UUID=5ccd-4cd0-abb2-74a132efbd7c ro vga=794 quiet splash init=/bin/bash

这样,你就可以直接启动到所指定的shell中,对发生的错误进行分析,修复等操作。

如果这样做都还是不行……好吧,我觉得你人品有问题!那么,还是拿出恢复cd,通常就是你的安装光盘,它允许你在启动时选择是否进入rescue修复模式。进入这个模式之后,他会自动找到你的硬盘安装的系统,并将它们挂载到一个临时目录下,这样,你就能进行修改配置文件或者其它修复操作了。

如果还是不行呢?恭喜你,回到Windows时代,还是老老实实重新安装吧。

关于linux 恢复作业的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 如何在Linux系统中恢复未完成的作业? (linux 恢复作业)