Linux shell 命令中nohup 、&、重定向的使用

一、nohup 和 & 使用方法

1.1、 nohup (不挂断)

nohup 是 no hung up 的缩写,意思是不挂断 。

使用 Xshell 等Linux 客户端工具,远程执行 Linux 脚本时,有时候会由于网络问题,导致客户端失去连接,终端断开,脚本运行一半就意外结束了。这种时候,就可以用nohup 指令来运行指令,即使客户端与服务端断开,服务端的脚本仍可继续运行。

nohup 语法格式:

nohup command [arg...]

说明:

除了无法进行输入操作(比如输入命令、换行、打空格等) 外 ,

标准输出 保存到 nohup.out文件中。

关闭客户端后,命令仍然会运行,不会挂断。

例如:

执行 nohup sh test.sh 脚本命令后,终端不能接收任何输入,标准输出 会输出到当前目录的nohup.out 文件。即使关闭xshell 退出后,当前session依然继续运行。

1.2、 & (可交互)

& 语法格式:

command [arg...] &

说明:

能进行输入操作(比如输入命令、换行、打空格等),即 可进行交互 输入和输出的操作。

标准输出 保存到 nohup.out文件中。

但是 关闭客户端后,程序会就马上停止。

例如:

执行 sh test.sh & 脚本命令后 ,关闭 xshell,脚本程序也立刻停止。

1.3、nohup 和 & 一块使用(不挂断,可交互)

语法格式:

nohup command [arg...] &

说明:

能进行输入操作(比如输入命令、换行、打空格等),即 可进行交互 输入和输出的操作,

标准输出 保存到 nohup.out 中,

关闭客户端后命令仍然会运行。

例子:

执行 nohup sh test.sh & 命令后,能进行输入操作,标准输出 的日志写入到 nohup.out 文件,即使关闭xshell,退出当前session后,脚本命令依然继续运行。

输入输出问题已经解决了, 是不是就完美了? 其实还有一个问题没有解决, 请往下看!

二、 日志 的 重定向 >

上面提到的日志文件默认名称是 nohup.out ,如果修改日志文件的名称,则用到 重定向 ,符号是 > ,语法格式是

logFile

说明:
是重定向的符号。

logFile 是日志文件名称,最好是英文、数字。

此时, nohup、 & 、 > 三者一块使用的 语法格式 :

nohup command >logFile &

示例:

nohup start.sh >aa.log &

说明:执行上面的命令后,可以进行输入,也能在后台运行,运行的日志输出到 aa.log 日志中。

三、错误信息的处理

nohup command >logFile &

虽然解决输入输出,后台也能运行问题,但是还有一项是 错误信息 无法输出到 日志文件中,要解决这个问题,需要增加命令 2 > file 。

标准输出 和 错误信息 同时使用,语法格式如下:

logFile1 2 >logFile2

有人会疑问,2 是什么意思? 请往下看。

3.1、Linux 标准输入、输出、错误信息的符号

Linux 标准输入、输出、错误信息的符号:

0 表示 stdin (standard input) 标准信息输入 ;

1 表示 stdout (standard output) 标准信息输出 ;

2 表示 stderr (standard error) 错误信息 ;

/dev/null 表示空设备文件。 如果不想输出任何的日志时,使用此参数 。

再来回顾上面的示例:

logFile1 2 >logFile2

logFile1 :即 1 >logFile1,1是标准信息输出,是默认的,可以省略,logFile1是 日志文件名字。

2 >logFile2 :2 是错误信息,即将 错误信息 输出 到 logFile2 文件中 。

到这时,明白 2 含义了吧!

3.2、错误信息 和 标准输出 输出在同一个文件中

如果想把 错误信息 和 标准输出 在同一个文件中 ,使用 2>&1 。 语法如下:

logFile 2>&1

说明:
logFile 表示 标准信息 输出到 logFile 文件中;

2>&1 表示 把 2(错误信息) 重定向, 输出到 1(标准输出) 中 。

两者的共同使用,表示 把 2(错误信息) 、1(标准输出) 都输出到同一个文件(logFile)中。

3.3、思考:不想输出日志信息怎么办 ?

提示:/dev/null 表示空设备文件。 如果不想输出任何的日志时,使用此参数 。

四、综合使用(推荐)

综上所述, 功能最全、推荐语法如下:

nohup command >logFile 2>&1 &

示例:

nohup start.sh > mySysLog.log 2>&1 &

说明: 执行命令后,并且将 标准输出(1)、错误信息(2) 写入到 mySysLog.log 文件中。

五、知识扩展

5.1、不停止服务,直接清空nohup.out

如果脚本一直运行下去,nohup.out 日志会一直增长,日志但是硬盘容量有限,怎么把日志文件的大小减少 ?

注意,千万别直接删除日志文件,会造成服务无法输出日志,服务异常直接停止运行,这是最严重生产事故。

不停止服务,直接清空nohup.out文件有两种方法:

第1种:

cat /dev/null > nohup.out

第2种:

cp /dev/null nohup.out

5.2、只记录警告级别比较高的日志

输出的日志太多,nohup.out 增长特别快,对于不重要的日记,可以不记录,选择只记录警告级别比较高的日志。

python 复制代码
只输出错误信息到日志文件,其它日志不输出
nohup ./program > /dev/null   2>error.log  &
5.3、不想输出日志

不想输出日志,什么日志都不要,只要服务能正常运行就行了。

python 复制代码
什么日志也不输出
nohup ./program > /dev/null   2>&1   &
相关推荐
今夕资源网20 分钟前
Windows Terminal更舒适的命令行环境 仅11MB 支持并行运行WSLLinux子系统 github开源项目
windows·github·命令行·cmd·terminal
念恒1230626 分钟前
进程控制---自定义Shell
linux·c语言
风曦Kisaki1 小时前
# Linux Shell 编程入门 Day02:条件测试、if 判断、循环与随机数
linux·运维·chrome
李日灐1 小时前
< 6 > Linux 自动化构建工具:makefile 详解 + 进度条实战小项目
linux·运维·服务器·后端·自动化·进度条·makefile
嵌入式×边缘AI:打怪升级日志1 小时前
嵌入式Linux开发:开源组件、第三方库与许可证详解
linux
计算机安禾2 小时前
【Linux从入门到精通】第34篇:搭建FTP与Samba——跨平台文件共享解决方案
linux·运维·服务器
日取其半万世不竭2 小时前
用 Netdata 实时监控服务器,比 Prometheus + Grafana 轻量得多
linux·服务器·网络·系统架构·负载均衡·zabbix·grafana
java_logo2 小时前
SiYuan 思源笔记 Docker 部署终极指南:Windows+Linux 双平台
windows·笔记·docker·思源笔记·思源笔记部署·docker部署思源笔记·思源笔记文档
jamon_tan2 小时前
Linux下cmake构建方法
linux
JiaWen技术圈2 小时前
内核子系统 nf_tables 深度解析
linux·服务器·安全·运维开发