最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

[整理]命令前面加上nohup是什么含义

Linux crifan 5734浏览 0评论

折腾:

[已解决]用Flask-RQ2运行后台任务失败:ConnectionError Error 97 connecting to localhost 6379

期间,看到:

resque – Rescue : Connection refused – Unable to connect to Redis on localhost:6379 – Stack Overflow

建议用:

nohup redis-server &

没见过nohup,所以需要去看看啥意思

nohup 命令

使用nohup让程序在远程主机后台运行-月光博客

Unix/Linux下一般比如想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:

  /usr/local/mysql/bin/mysqld_safe –user=mysql &

  但是加入我们很多程序并不象mysqld一样做成守护进程,可能我们的程序只是普通程序而已,一般这种程序使用 & 结尾,但是如果终端关闭,那么程序也会被关闭。但是为了能够后台运行,那么我们就可以使用nohup这个命令,比如我们有个test.php需要在后台运行,并且希望在后台能够定期运行,那么就使用nohup:

  nohup /root/test.php &

nohup 命令

  用途:不挂断地运行命令。

nohup就是不挂起的意思( no hang up)

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:

  nohup command > myout.file 2>&1 &

nohup命令详解 – 博客频道 – CSDN.NET

“nohup command

或者

nohup command &

它把标准输出(STDOUT)和标准错误(STDERR)结果输出到nohup.txt文件这个看似很方便,但是当输出很大的时候,nohup.txt文件会非常大,或者多个后台命令的时候大家都会输出到nohup.txt文件,不利于查找结果和调试程序。

nohup ./command.sh > output 2>&1 &

解释:前面的nohup 和后面的&我想大家都能明白了把。

主要是中间的 2>&1的意思

这个意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件output里面,

所以结果是标准错误和标准输出都导入文件output里面了。

至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。

这就会导致 >output 2>output 文件output被两次打开,而stdout和stderr将会竞争覆盖,这肯定不是我门想要的.

这就是为什么有人会写成:

nohup ./command.sh >output 2>output出错的原因了

最后谈一下/dev/null文件的作用

这是一个无底洞,任何东西都可以定向到这里,但是却无法打开。

所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里>./command.sh >/dev/null 2>&1

IBM Knowledge Center – nohup 命令

-》

此处,所以去试试:

nohup redis-server > redis.log 2>&1 &

不过,打算再去研究研究:

[整理]Linux中重定向中大于号的用户以及>2&1的含义

最后决定用:

nohup redis-server >> redis.log 2>&1 &

【总结】

nohup=no hang up=不挂起 -》 不被停掉 -〉 即使在终端被关掉的情况下,程序也还可以继续运行

对比:

<code>redis-server &amp;
</code>

在终端被关掉后,redis-server程序也就被关掉了。

而:

<code>nohup redis-server &amp;
</code>

即使终端被关掉,redis-server也还可以继续在后台运行。

转载请注明:在路上 » [整理]命令前面加上nohup是什么含义

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
84 queries in 0.184 seconds, using 22.11MB memory