Linux命令之nohup 和 & 的使用说明

nohup 命令说明

nohup 是 no hungup 的缩写,意思是“不挂断”。

我们在使用Xshell等工具,远程执行Linux脚本时,有时候会由于网络问题,导致失去连接,终端断开,程序运行一半就意外结束了。这种时候,就可以用``nohup` 指令来运行指令,使程序可以忽略挂起信号继续运行。

语法格式:

    nohup Command [ Arg ... ] [ & ]

    nohup 命令运行由 Command 参数 和 Arg参数 指定的命令,忽略所有挂断(SIGHUP)信号。

    如果想要在运行后台中的 nohup 命令,则要添加 & ( 表示 “and” 的符号)到命令的尾部。

    如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

1、只使用 nohup

语法格式:

nohup  Command

关闭 标准输入(控制台无法输入),标准输出 和 错误信息保存到 nohup.out 文件里面,关闭客户端后命令仍然会运行。

例如:

将nohup sh test.sh 任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out 文件,即使关闭xshell退出当前session依然继续运行。
2、只使用 &

语法格式:

sh Command  &

不会关闭标准输入(控制台可以输入),但会丢失 标准输出 和 错误信息,关闭客户端后命令会就马上停止。

例如:

将sh test.sh & 任务放到后台 ,关闭 xshell,对应的任务也跟着停止。
3、 nohup 和 & 配合使用(推荐使用)

语法格式:

nohup Command [ Arg ... ] &

示例:

nohup sh test.sh &

不会关闭标准输入(控制台可以输入),也不会丢失标准输出和错误信息,并将输出信息保存到 nohup.out 中,关闭客户端后命令仍然会运行。

例子1:
nohup sh test.sh & 命令在后台执行,可以使用标准输入,终端能够接收任何输入,标准输出 和 错误信息 默认保存到当前目录下的 nohup.out 文件,即使关闭xshell退出当前session依然继续运行。

例子2:
nohup ./startWeblogic.sh & 意思是即使退出ssh界面,命令仍然在后台执行,并且打印日志到 nohup.out 文件中,当然也可以将nohup.out 的输出转向到其他文件,需要使用 重定向 。
4、 nohup、 & 、 重定向(推荐使用)

使用 nohup sh test.sh & 命令时,默认是将信息输出到 nohup.out 文件中。 但是在实际工作中,我们想把日志信息输出到某个具体文件中,可以下面的命令。

语法格式:

nohup  command  >logfile  2>&1  &

上面命令可以拆分成三部分 nohup command & 、 >logfile 和 2>&1 。

    nohup command & :这个命令上面已经介绍过了,就是后台运行命令;
    >logfile :将 command 运行的日志 重定向 写入到 logfile 文件中,即输出内容 不打印到屏幕上,而是输出到 logfile 文件中。
    2>&1 是将 错误信息(2) 重定向到标准输出(&1)。而 标准输出 默认是写入到 file 文件中,所以 错误信息(2)、 标准输出 都 写入到 file 文件中。

例子:

nohup  starMailWeb.sh > mail.log 2>&1  &

后台运行 starMailWeb.sh ,并且将 标准输出(1)、标准错误(2) 等日志 写入到 mail.log 文件中。

2>&1 相关的参数说明:

    /dev/null 表示空设备文件,

    0 表示 stdin (standard input) 标准输入,

    1 表示 stdout (standard output) 标准输出,

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

    > file 表示将 标准输出(1) 输出到 file文件,也就相当于 1>file ;

    2>error 表示将 错误信息(2) 重定向到 error文件中 ;

    2>&1 也就表示将 错误信息(2) 重定向 到 标准输出(1) ;

    2>&1 >logfile :错误信息(2) 重定向 到 标准输出(1) ,标准输出(1) 重定向 到 文件file ,等于 1>logfile 2>&1 ,即 标准输出(1) 重定向 到 logfile 文件中,错误信息(2) 重定向 到 标准输出(1) 。

    & 放在命令到结尾,表示后台运行,防止终端一直被某个进程占用,这样终端可以执行别到任务,配合 >file 2>&1 可以将 log信息保存到某个文件中,但如果终端关闭,则进程也停止运行。如 command > file.log 2>&1 & 。 ( 参考 2、只使用 &)

5、知识扩展
5.1、清空 nohup.out

如果命令一直运行下去,nohup.out会一直自己增长下去,如果你的服务器硬盘不给力的话,很容易把应用也挂掉(硬盘没空间 ,啥都玩不转),但是又不能一味的直接删。因为直接删除,可能会造成应用无法打印后续的错误日志,该问题常见于weblogic服务器,jboss服务器等这些大型中间件,这个在生产环境上要尤为注意。

因此就有了我们不停止服务直接,清空nohup.out文件的方法。
下面是两个种不用停止WEB服务就可以清空nohup.out的命令。

第一种:cp /dev/null nohup.out
第二种:cat /dev/null > nohup.out

 

5.2、解决 nohup.out 文件过大

nohup 的重定向,一劳永逸解决 nohup.out 文件过大的问题
以下是定义日志打印级别,除了高于级别2的告警信息记录到log文件外,其余直接不记录

//只输出错误信息到日志文件
nohup ./program >/dev/null 2>log &

//什么信息也不要
nohup ./program >/dev/null 2>&1 &
 

<think>好的,用户问的是如何在Linux使用nohup执行多个命令。我需要结合之前的引用资料系统指令来回答。首先,回顾引用中的内容,引用12提到了nohup的基本用法,通常&结合使用。引用3给出了一个shell脚本的例子,里面用多个nohup命令来同时运行不同的Python脚本。引用4提到了运行jar包并重定向日志。 用户的需求是运行一系列命令,可能需要同时执行或者按顺序执行。首先,我需要明确两种情况:并行执行多个命令顺序执行多个命令。对于并行,使用&让每个命令在后台运行,每个命令前加nohup。例如在shell脚本中每个命令都加上nohup&,如引用3中的示例。这样每个命令都会独立在后台运行,并且输出到指定日志文件。 如果是顺序执行多个命令,比如一个命令执行完再执行下一个,但都需要在后台运行,可以用括号把命令组合起来,然后整体用nohup。例如nohup (cmd1 && cmd2 && cmd3) &,这样整个序列作为一个作业在后台运行,并且不受挂断影响。 另外,用户可能需要知道如何正确重定向输出,避免日志混乱。引用34中都有提到重定向输出到文件或/dev/null。比如每个命令的输出单独保存,或者合并到一个文件。同时需要注意错误输出的处理,使用2>来重定向错误。 还需要考虑是否使用脚本文件。引用3中的例子是通过shell脚本运行多个命令,这样可以方便管理。用户可能希望直接写命令或者使用脚本,需要都给出示例。 最后,要检查是否有语法错误,确保所有命令用正确的格式,比如使用&&连接顺序命令&放在后台执行。同时,注意每个nohup命令的正确结构,比如nohup command > output.log 2>&1 &,这样同时处理标准输出错误输出。 总结回答的结构:先介绍并行顺序两种情况,给出具体示例,包括脚本方法命令行方法,并说明输出重定向的处理。最后提醒用户检查进程日志,确保命令正确执行。</think>### 如何在Linux中用nohup运行多个命令? 在Linux使用`nohup`运行多个命令主要有两种场景:**并行执行****顺序执行**,以下是具体实现方法: --- #### 一、并行执行多个命令 通过`nohup`结合`&`实现后台并行运行,每个命令单独处理输出。 **示例1:通过Shell脚本实现** 新建脚本文件(如`run_commands.sh`): ```bash #!/bin/bash nohup command1 > output1.log 2>&1 & nohup command2 > output2.log 2>&1 & nohup command3 > output3.log 2>&1 & ``` 运行脚本: ```bash chmod +x run_commands.sh ./run_commands.sh ``` **说明**: - `2>&1`表示将标准错误(stderr)重定向到标准输出(stdout)[^3] - `&`将命令置于后台运行 - 每个命令的日志单独保存,避免混杂[^4] --- #### 二、顺序执行多个命令 使用`&&`连接多个命令,整体交给`nohup`管理。 **示例2:单行命令组合** ```bash nohup (command1 && command2 && command3) > combined.log 2>&1 & ``` **说明**: - 使用`()`将多个命令合并为一个子进程 - 所有命令按顺序执行,任一命令失败则终止后续操作[^2] --- #### 三、其他注意事项 1. **输出重定向** - 若需忽略所有输出:`nohup command >/dev/null 2>&1 &` - 若需分离标准输出错误:`nohup command >stdout.log 2>stderr.log &` 2. **进程查看** 使用`jobs -l`或`ps aux | grep command`验证后台进程状态[^1] 3. **终止后台进程** 通过`kill -9 PID`手动终止(PID通过`ps`命令获取) --- ### 示例场景 假设需要同时运行Python脚本Java程序: ```bash #!/bin/bash nohup python3 script1.py > script1.log 2>&1 & nohup java -jar app.jar > app.log 2>&1 & ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值