Linux 命令在后台运行 & nohup screen tmux

3,892次阅读
没有评论

Linux 命令在后台运行 & nohup screen tmux

Linux 服务器上,后台运行程序、使用 SSH 终端(比如 putty,xshell)连接服务器上运行比较耗时任务,可能需要几个小时甚至几天才能完成,这时候终端被占据,如果遇到网络不稳定,连接还会断开,程序也会中断。再说我们还要做其他的任务呢,这个时候,我们终端关闭 ->SSH 断开 -> 任务随即停止运行。这个是因为,我们退出 SSH 连接时,发送 SIGHUP 信号给控制会话,进而导致我们前台会话上的程序停止运行。所以需要将这一类耗时任务放到后台来跑,只需要记录好日志就行了,下面这些常用方法来实现这个需求。

&

当在前台执行某个作业时,终端被该作业占领;能够在命令后面加上 &  实现后台执行。比如:sh test.sh &

适合在后台执行的命令有 find、费时的排序及一些 shell 脚本。在后台执行作业时要当心:须要用户交互的命令不要放在后台执行,由于这样你的机器就会在那里傻等。只是,作业在后台执行一样会将结果输出到屏幕上。干扰你的工作。

假设放在后台执行的作业会产生大量的输出。最好使用以下的方法把它的输出重定向到某个文件里:

command > out.file 2>&1 &

这样,全部的标准输出和错误输出都将被重定向到一个叫做 out.file 的文件里。
注意:当你成功地提交进程以后,就会显示出一个进程号,能够用它来监控该进程,或杀死它。(ps -ef | grep 进程号 或者 kill -9 进程号)

 

nohup

nohup 是 no hang up 的缩写,指不间断,不挂断,在后台不挂断地运行命令。在关闭终端 / 退出账户后,nohup 在后台继续运行。默认情况下,nohup 的输出会保存到当前目录下的 nohup.out 文件中。

使用 nohup & 运行:

root@panel:~# nohup wget https://speed.hetzner.de/1GB.bin &
# 运行成功会输出一个 PID 号
[1] 169197
# 查找对应的 PID
root@panel:~#  ps -aux | grep wget
root 169197 22.4 0.8 9712 6404 ? S 12:07 0:10 wget https://speed.hetzner.de/1GB.bin
root 169226 0.0 0.0 3312 712 pts/0 S+ 12:07 0:00 grep --color=auto wget
# 手动杀死对应的进程
kill -9 169197

Ctrl + z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态。

Ctrl+c

终止前台命令。

jobs
查看当前有多少在后台运行的命令。
jobs - l 选项可显示所有任务的 PID,jobs 的状态可以是 running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的 shell 环境已知的列表中删除任务的进程标识。

bg
将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用 bg  %jobnumber(jobnumber 是命令编号,不是进程号)将选中的命令调出。

fg
将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用 fg %jobnumber(jobnumber 是命令编号,不是进程号)将选中的命令调出。

nohup 和 & 的区别

使用 & 命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。

nohup 命令可以在你退出帐户之后继续运行相应的进程,并没有后台运行的功能,即若只使用 nohup,终端不再能够接收任何标准输入。

nohup 就是不挂起的意思(no hang up)。该命令的一般形式为:nohup command &,最后一个 & 符号代表后台运行。

screen

screen 可以创建会话,在会话窗口中运行命令。挂起会话后,会话窗口中的命令在后台继续运行。在关闭终端 / 退出账户后,会话窗口中的命令不受影响。
执行 screen,如果提示 screen: command not found 命令不存在可以执行:yum install screenapt-get install screen安装。

常用 screen 命令:

screen -S name # 创建一个窗口 
screen -ls # 查看当前已经创建的窗口 
screen -d -r name # 回到名字为 name 的窗口 
screen -X -S name quit # 关闭名字为 name 的窗口

用法:

      screen [选项] [会话名]

选项:

选项 意义
-4 仅将主机名解析为 IPv4 地址
-6 仅将主机名解析为 IPv6 地址
-a 强制所有功能进入每个窗口的终端
-A 将所有的视窗都调整为目前终端机的大小
-c file 读取配置文件而不是 .screenrc
-d (-r) 挂起正在运行的会话(并在此处恢复)
-dmS name 启动作为守护程序:挂起会话
-D (-r) 挂起和注销远程(并在此处恢复)
-D -RR 做任何需要的事情来获得一个会话
-e xy 更改命令字符
-f 流量控制开启 -fn = off ;-fa = auto
-h lines 设置回滚历史记录缓冲区的大小
-i 当流量控制打开时,会更快地中断输出
-l 登录模式开启 (update /var/run/utmp),-ln = off
-ls [match] or -list 列出所有的会话
-L 打开输出日志记录
-Logfile file 设置日志文件名
-m 忽略已经运行的会话,强制创建一个新的会话
-O 选择最佳输出而不是 exact vt100 emulation
-p window 如果已命名的窗口存在,则预选该窗口
-q 安静的启动。如果不成功,则使用非零返回代码退出
-Q 命令将向查询过程的 STDOUT 发送响应
-r [session] 恢复已挂起的会话
-R 尽可能地恢复一个会话,如果无法恢复,则创建一个新的会话
-s shell 指定建立新会话时,所要执行的 shell
-S sockname 指定会话名
-t title 设置标题(窗口名称)
-T term 对窗口使用 $term,而不是 screen
-U 使用 UTF-8 编码
-v 显示版本信息
-wipe [match] 清理无法使用的会话
-x 恢复之前挂起的会话
-X 在指定的会话中,以命令的形式执行

tmux

Tmux 是一个优秀的终端复用软件,类似 GNU Screen,但来自于 OpenBSD,采用 BSD 授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行 tmux 后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机;是 BSD 实现的 Screen 替代品,相对于 Screen,它更加先进:支持屏幕切分,而且具备丰富的命令行参数,使其可以灵活、动态的进行各种布局和操作。

Tmux 安装

ubuntu 版本下直接 apt-get 安装:

sudo apt-get install tmux

centos7 版本下直接 yum 安装:

yum install -y tmux

tmux 终端下常用命令:

tmux new -s name # 新建名为 name 的会话
tmux ls # 列出所有会话列表
tmux a -t name # 从终端进入名为 name 的会话
tmux kill-session -t name # 销毁名为 name 的会话
tmux rename -t old_name new_name # 重命名会话

tmux 会话下常用命令

所有命令都需要先按Ctrl+b,激活控制台

命令 作用
ctrl+b ? 显示所有可用的命令,按 q 返回
ctrl+b c 创建新的窗口,并切换到该窗口
ctrl+b w 显示所有窗口列表
ctrl+b p 切换到上一个窗口
ctrl+b n 切换到下一个窗口
ctrl+b , 重命名当前窗口
ctrl+b & 关闭当前窗口
ctrl+b 数字键 切换到指定窗口
ctrl+b d 暂时断开会话(使用该命令将程序后台运行,关掉终端程序不会停止)
ctrl+b ~ 列出提示信息缓存;其中包含了之前 tmux 返回的各种提示信息
ctrl+b : 进入命令行模式;此时可以输入支持的命令,例如 kill-server 可以关闭服务器

tmux 窗格

​ tmux 的一个窗口可以被分成多个 pane(窗格),可以做出分屏效果。

命令 作用
ctrl+b % 将当前面板平分为左右两块
ctrl+b“ 将当前面板平分为上下两块
ctrl+b o 切换到下一个窗格
ctrl+b up / down / left / right 切换窗格
ctrl+b space 对当前窗口下的所有 pane 重新排列布局,每按一次,换一种样式
ctrl+b z 最大化当前 pane,再按一次后恢复
ctrl+b x 关闭当前使用中的 pane,操作之后会给出是否关闭的提示,按 y 确认即关闭

tmux 会话下查看历史输出

​ 按 Ctrl-b,就会进入 copy mode,然后用 PgUp/PgDn 来浏览历史输出,按 q 退出。

正文完
 0
VPSWe
版权声明:本站原创文章,由 VPSWe 于2022-05-01发表,共计3456字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码