nohup: ignoring input and appending output to 'nohup.out'

部署项目到远程服务器

利用 terminal 通过 ssh 连接到服务器,常规的启动命令是:

java -jar test.jar &

但是当你关闭 terminal 窗口,就访问不了部署的项目了。
这时候需要使用 nohup 命令启动(概念:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程)
如果一个命令只使用&来标识,则表示其在当前Session中,运行在后台。如果当前Session关闭或者当前的terminal工具关闭,则其附属的进程将会关闭。
正常运行的后台进程都是需要nohup与&,两者并行使用的,方可保证其在后台正常运行
这时输入:

nohup java -jar test.jar &

此时会报错:

nohup: ignoring input and appending output to 'nohup.out'

解决办法

原因:是因为使用 nohup 会产生日志文件,默认写入到 nohup.out。
解决:将 nohup 的日志输出到 /dev/null,这个目录会让所有到它这的信息自动消失。

nohup java -jar test.jar >/dev/null 2>/dev/null &
nohup java -jar test.jar >/dev/null 2>&1 &
  • nohup放到命令开头表示不挂起,表示即使退出终端该进程也不会掉,&放在命令到结尾,表示后台运行。
  • /dev/null 表示空设备文件(位桶(bit bucket)或者黑洞(black hole)的地方)。
  • 0 表示stdin标准输入
  • 1 表示stdout标准输出
  • 2 表示stderr标准错误信息输出
  • 2>&1 标识将错误输出重定向到标准输出,注意>&不能分开

linux重定向

0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出。在一般使用时,默认的是标准输出,既1。当我们需要特殊用途时,可以使用其他标号。

  • 例如:将某个程序的错误信息输出到log文件中:./program 2>log。这样标准输出还是在屏幕上,但是错误信息会输出到log文件中。
  • 另外,也可以实现0,1,2之间的重定向。2>&1:将错误信息重定向到标准输出。

Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。

  • 如果想要正常输出和错误信息都不显示,则要把标准输出和标准错误都重定向到/dev/null, 例如:# ls 1>/dev/null 2>/dev/null
  • 还有一种做法是将错误重定向到标准输出,然后再重定向到 /dev/null,例如:# ls >/dev/null 2>&1
    注意:此处的顺序不能更改,否则达不到想要的效果,此时先将标准输出重定向到 /dev/null,然后将标准错误重定向到标准输出。由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,于是一切静悄悄。
posted @ 2023-01-13 15:19  wandoubaguo  阅读(2327)  评论(0编辑  收藏  举报