28

nohup VS screen

 4 years ago
source link: https://mp.weixin.qq.com/s/n4OzSDr_Yw2h79-hHd4ERA
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

MVFjY3e.gif

说到在Linux系统上后台运行任务,可能很多人的第一反应是 nohup 命令,可能还会有人提到 screen 命令。今天老张就给大家介绍这两个命令,相信看完老张的介绍,大家可以根据实际情况灵活选择使用二者。

01

nohup

先来看一下nohup的帮助文档:

root@ubuntu:~# nohup --help

Usage: nohup COMMAND [ARG]...

or: nohup OPTION

Run COMMAND, ignoring hangup signals.


--help display this help and exit

--version output version information and exit


If standard input is a terminal, redirect it from an unreadable file.

If standard output is a terminal, append output to 'nohup.out' if possible,

'$HOME/nohup.out' otherwise.

If standard error is a terminal, redirect it to standard output.

To save output to FILE, use 'nohup COMMAND > FILE'.

nohup 相对比较简单,帮助文档说的也比较明白。但是实际使用中往往需要配合一些其他的linux特性。

搭配“&”后台运行

使用 nohup 启动的程序会忽略 hangup 信号, hangup 只是终止信号的一种,但是在关闭终端时,还会有其他的终止的信号,所以这时候往往需要配合 & 一起使用,这样就可以做到不管是我们主动或者意外断开终端,程序依然能够继续运行。

root@ubuntu:~# nohup COMMAND &

搭配“>”、“<”重定向输入输出

因为 nohup 在缺省状态下会将原本输出到控制台的 stdoutstderr 重定向至执行目录下的nohup.out文件,在特殊需求的情况下需要配合linux的文件重定向自定义输入输出文件。下面的实例将标准输入(0)、标准输出(1)、标准错误(2)分别重定向至my.in、my.out、my.err。

root@ubuntu:~# nphup COMMDAND 0 < my.in 1 > my.out 2 > my.err

02

screen

比起 nohupscreen 要复杂的多,我们先来看一下 screen 官方给出的简介。

屏幕是一个全屏窗口管理器,它在多个进程(通常是交互式外壳程序)之间多路复用物理终端。

……

当screen被调用的时候,它会创建一个带有SHELL的窗口,你可以像平时操作SHELL一样的运行你的进程。你可以随时创建运行其他进程的窗口,杀死当前窗口,查看活动窗口的列表,打开和关闭输出日志记录,在窗口里面查看回滚历史记录,在窗口之间切换等。所有的窗口之间都是相互独立的。即使断开screen会话,进程依然能够在后台运行。

……

安装screen

虽然使用 screen 需要用户自己安装,但是 screen 安装相对简单。

CentOS用户可以使用 yum 安装:

root@centos:~# yum install screen

Ubuntu用户可以使用 apt 安装:

root@ubuntu:~# apt install screen

screen的用法

screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s <shell>][-S <作业名称>]


-A  将所有的视窗都调整为目前终端机的大小。

-d<作业名称>  将指定的screen作业离线。

-h<行数>  指定视窗的缓冲区行数。

-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。

-r<作业名称>  恢复离线的screen作业。

-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。

-s<shell>  指定建立新视窗时,所要执行的shell。

-S<作业名称>  指定screen作业的名称。

-v  显示版本信息。

-x  恢复之前离线的screen作业。

-ls或--list  显示目前所有的screen作业。

-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

-r 搭配 -S 可以非常方便的复用如数据库查询之类的某些需要打开的SHELL操作。

screen的快捷键

比起退出 VIM 来说,退出 screen 的难度恐怕也不遑多让 BVBv2qq.png!web 。进入 screen 窗口后,虽然感觉是操作与普通终端无异,但是 screen 本身也有许多快捷键,而这些快捷键都需要搭配 Ctrl+a

ctrl a ctrl a, 最近使用的两个窗口之间切换

ctrl a + 数字, 切换到某个窗口

ctrl a + d, detach

ctrl a + k, 关闭当前窗口

ctrl a + :, 进入命令行模式

ctrl a C, 清空窗口数据

ctrl a + A, 修改当前窗口的名称

以退出当前窗口为例,需要先按下 Ctrl+a ,松开之后快速按 d 。更多的快捷键可以查阅官方文档:

http://www.gnu.org/software/screen/manual/screen.html#Default-Key-Bindings

03

nohup VS screen

开箱即用,无需安装 易用性 高 低 支持窗口输入、输出 退出终端,进程继续运行 可以,但是需要配合& 可以 适用场景 单次运行、耗时很久的进程 除了支持后台运行外,正常的终端操作也可以使用screen完成。

RvEBrqU.jpg!web

6riqE3J.png!web

在看点这里

vyYnQrr.gif


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK