怎么用linux nohup命令实现退出终端后程序继续后台运行

Unix/Linux下一般想让某个程序在后台运行,很多都是使用&
在程序结尾来让程序自动运行;但如果要想在退出终端后,程序依然还在后台运行,则要用nohup与&
组合来实现。

nohup 命令

用途: 不挂断地运行命令

【Linux技巧】掌握nohup命令,实现终端退出后程序继续后台运行

语法: nohup Command [ Arg … ] [&
]

描述  nohup 命令运行由 Command参数和任何相关的Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序:要运行后台中的 nohup 命令,需要添加&
到命令的尾部。

日志记录  无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的nohup.out 文件中。如果当前目录的nohup.out文件不可写,输出重定向到$HOME/nohup.out文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

使用时注意  在当shell中提示了nohup成功后,还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;如果在nohup执行成功后直接点关闭程序按钮关闭终端的话,这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown,起不到关掉终端后调用程序继续后台运行的作用。

例:

$nohup python manage.py runserver &


在Linux环境下,我们常常需要让程序在后台持续运行,而不受终端关闭的影响。一种解决方案是使用nohup命令。本文将详细介绍nohup命令的用法,并给出几个实际应用案例。
一、nohup命令的基础用法
nohup命令可以使某个命令在后台持续运行,即使用户退出终端或者认为关闭了终端的话。只需要在待执行的命令前加上nohup即可,例如:
$ nohup ./hello &
其中hello是一个可执行的程序文件,&符号表示将该程序放到后台运行。
当然,程序的输出信息仍将输出到终端上,为了避免这种情况出现,我们还需要将输出信息重定向到某一个文件中。例如:
$ nohup ./hello > log 2>&1 &
这里表示将hello的输出信息重定向到log文件中,2>&1表示将标准错误输出到标准输出,&符号表示将程序放到后台运行。
二、使用nohup命令进行服务端的持续运行
1、使用nohup命令启动Node.js服务器程序
在使用Node.js编写服务器端程序的时候,我们经常需要让程序一直在后台运行并提供服务,nohup命令可以帮助我们实现这一目标。例如:
$ nohup node app.js > log 2>&1 &
其中app.js是Node.js程序的入口文件,>log表示将输出信息重定向到log文件中。
2、使用nohup命令启动Apache服务器
对于常用的Web服务器Apache,我们可以使用nohup命令来启动该服务器。例如:
$ sudo nohup /usr/local/apache/bin/apachectl start &
其中,apachectl是Apache的启动命令,sudo表示以管理员权限运行nohup命令。
三、nohup命令的不足之处
nohup命令确实可以很好地解决程序后台运行的问题,但是它并不是万能的。在下列情况下,nohup命令可能会失效:
1、程序仍然在前台运行
如果程序本身就是在前台运行的,nohup命令并不会强制将其转化为后台运行。
2、终端被强制退出
如果用户登录的远程主机断开了连接,nohup命令便会失效,程序也会随之被终止。
3、守护进程的管理
对于需要长时间运行的服务,我们通常需要使用守护进程的方式来管理。nohup命令并不能很好地处理这种情况,建议使用专业的守护进程管理工具如supervisord。
总之,nohup命令是一个非常有用的Linux命令,通过简单的使用可以实现程序的后台持续运行。但是在实际使用时还需根据具体情况进行调整。