nohup 和 >/dev/null 2>&1

一、背景说明:

启动服务的时候,如果使用如下命令,则会在start.sh脚本所在的目录下,产生一个名为 nohup.out 的输出文件

nohup ./startup.sh &

这个多余的 nohup.out 文件是不需要的,可以使用如下命令解决:

nohup  ./startup.sh  >/dev/null  2>&1  &

 

二、命令解析:

1、nohup和尾部 &

  1)nohup 是no hangup,不要挂断,永久运行。关闭终端,当前运行的进程不终止,标准输出内容会输出到当前目录的 nohup.out 日志文件中而不显示在终端。

  2)命令最后一个 &,表示后台运行的意思,和 nohup 配置表示不挂断后台运行。

2、>/dev/null 和 2>&1

  1)/dev/null 是 Linux 一个空设备文件,通常也被称为位桶(bit bucket)或黑洞,这个文件接收到任何数据都会被丢弃,也就是不输出任何信息到终端。

  2)> 代表重定向到哪里;重定向的符号有两个:> 或 >>,> 会先清空文件,然后再写入内容,>> 会将重定向的内容追加到现有文件的尾部。

  3)Linux系统预留了三个文件描述符:0、1 和 2,他们的意义如下所示:

    ①0:标准输入流 stdin

    ②1:标准输出流 stdout,默认值是1

    ③2:标准错误流 stderr

  4)">/dev/null" 等价于 "1>/dev/null",表示标准输出(1)输出到 /dev/null 中,即终端不输出标准输出信息;

     "2>&1" 中的 “&” 是等价于的意思,表示标准错误(2)输出的位置等价于标准输出(1)的位置,即等价于 “2>/dev/null”, 即终端不输出标准错误信息。

             因此,">/dev/null 2>&1" 表示 标准错误信息和标准输出信息,在终端上均不输出。

 

三、指定输出文件:

如果想要将服务启动和运行过程中的日志信息输出到指定位置(比如:/var/log/start.log),可以参考如下命令:

nohup ./startup.sh >/var/log/start.log 2>&1 &
nohup sh startup.sh >/var/log/start.log 2>&1 &

 

四、sh xxx.sh与./xxx.sh区别:

sh xxx.sh是用sh执行startup.sh,startup.sh可以没有执行标志,可以不用加./,可以不用在脚本第一行写上#!/bin/sh。
./startup.sh是调用脚本第一行制定的shell去解释执行,缺省为sh,就是bash。

 

  

posted @ 2021-01-22 16:30  阿森2020  阅读(1218)  评论(0编辑  收藏  举报