Linux nohup后台启动/ 后台启动命令中nohup 、&、重定向的使用

Linux nohup后台启动/ 后台启动命令中nohup 、&、重定向的使用经常看到一些 jar 包 sh 脚本用 nohup 命令后台启动 今天就讲解一下 nohup 的用法

大家好,欢迎来到IT知识分享网。

一、前言

经常看到一些jar包,sh脚本用nohup命令后台启动,今天就讲解一下nohup的用法。

nohup主要作用就是可以在后台运行,并可以选择将日志输出到指定文件。如启动jar包,若使用java -jar demo.jar的方式启动程序当窗口关闭的时候程序也停止了,而且日志会直接输出到控制台非常不直观,nohup启动就可以解决这两个问题。

二、nohup(不挂断)简介

nohup 是 no hung up的缩写,意思是不挂断 。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

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

nohup 语法格式:

nohup 命令 [参数]... 

说明:

  • 关闭客户端后,命令仍然会运行,不会挂断
  • nohup命令允许被运行的程序的输出信息将不会显示到终端。

三、nohup使用

3.1、nohup启动

nohup sh test.sh 

说明:

  1. 后台启动test.sh脚本,日志默认会输出到当前目录的nohup.out 文件

在这里插入图片描述

3.2、nohup与&的区别

&符号表示将该命令或脚本放入后台运行。 即&方式启动会有进程号,使用Ctrl+C程序不会中断,但终端关闭后运行会中断。

nohup sh test.sh & 

在这里插入图片描述

3.3、nohup与>,日志重定向

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

nohup sh test.sh >test.log 

>表示标准输出,还可以用>,>>, 1>或1>>等进行表示

3.4、nohup后台启动-综合使用(推荐)

# 后台执行test.sh文件,将标准日志输出到output.log文件中,将错误日志也输出到output.log文件中 nohup ./test.sh > output.log 2>&1 & 等同于 nohup ./test.sh > output.log 2>output.log & 

说明:

">"符号用于将命令的`标准输出`重定向到指定的文件中 > outlog.log 表示将终端输出保存到outlog.log文件中 "2>"表示将命令的`标准错误`输出重定向到指定的文件中 2>&1 表示将命令的标准错误输出重定向到标准输出1中一起输出 (ps:标准输出1指的是>outlog.log文件,具体可见下面的内容) & 后台挂起 

2>&1

0 表示stdin标准输入,用户键盘输入的内容
1 表示stdout标准输出,输出到显示屏的内容
2 表示stderr标准错误,报错内容
2>&1是一个整体,>左右不能有空格,即将错误内容重定向输入到标准输出中去。
>符号用于将命令的标准输出重定向到指定的文件中,
2>表示将命令的标准错误输出重定向到指定的文件中,
2>&1表示将命令的标准错误输出重定向到标准输出中





在Linux系统中0 1 2是一个文件描述符

几种输入输出方式 文件描述符 操作符 java中表示 说明
标准输入(stdin),即standard input 0 <或<< System.in 即表示键盘输入
标准输出(stdout),即standard output 1 >,>>, 1>或1>> System.out 例如,运行”ls 文件”命令将会输出当前工作目录下的文件列表,这些信息将会被输出到标准输出中并显示在终端上。
标准错误输出(stderr),即standard error output 2 2>或2>> System.err 例如,运行”ls 文件”命令,但是不存在此文件,那么将会输出错误信息”ls:cannot access ‘文件名’:No such file or directory”,这个错误信息将会被输出到标准错误输出中并显示在终端上。

3.5、nohup后台启动(不生成日志)

上面的示例中,都会将nohup执行的日志存放到nohup.out文件或者其他文件中,有没有方法不存放日志了呢?请使用以下命令

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

四、查看进程

nohup test.sh >out.log 2&1 & 
ps -aux | grep "test.sh" 

参数说明:

  • a: 显示所有程序
  • u: 以用户为主的格式来显示
  • x: 显示所有程序,不区分终端机

五、知识扩展

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

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

# 第1种: cat /dev/null > nohup.out # 第2种: cp /dev/null nohup.out 

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

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

# 只输出错误信息到日志文件,其它日志不输出 nohup ./test.sh > /dev/null 2>error.log & 

5.3、不想输出日志

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

# 什么日志也不输出 nohup ./test.sh > /dev/null 2>&1 & 

创作不易,欢迎打赏,你的鼓励将是我创作的最大动力。

在这里插入图片描述




免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119216.html

(0)
上一篇 2025-11-07 08:20
下一篇 2025-11-07 08:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信