内容简介:说到在Linux系统上后台运行任务,可能很多人的第一反应是01
说到在 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 在缺省状态下会将原本输出到控制台的 stdout 和 stderr 重定向至执行目录下的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
比起 nohup , screen 要复杂的多,我们先来看一下 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 的难度恐怕也不遑多让 。进入 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完成。 |
在看点这里
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
轻量级Django
茱莉亚·埃尔曼 (Julia Elman)、马克·拉温 (Mark Lavin) / 侯荣涛、吴磊 / 中国电力出版社; 第1版 / 2016-11-1 / 35.6
自Django 创建以来,各种各样的开源社区已经构建了很多Web 框架,比如JavaScript 社区创建的Angular.js 、Ember.js 和Backbone.js 之类面向前端的Web 框架,它们是现代Web 开发中的先驱。Django 从哪里入手来适应这些框架呢?我们如何将客户端MVC 框架整合成为当前的Django 基础架构? 本书讲述如何利用Django 强大的“自支持”功......一起来看看 《轻量级Django》 这本书的介绍吧!