nohup 英文全称 no hang up(不挂起)。当我们把项目部署到服务器上时,只有一直保持 linux 终端的连接才能够运行项目,当我们把连接软件 Xshell 或者 Finalshell 连接工具关掉时,项目也就停止运行。只要用了 nohup 命令,我们的项目就能够一直运行了,此时就实现了我们需求。

易错点:有些人会错拼为 nohub ,比如我… 😅😅😅

检查

查询 nohup 是否安装:

1
which nohup

安装方法略。

使用

nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

语法格式:

1
nohup Command [Arg...] [&]
  • nohup:不挂断的运行,并没有后台运行的功能,使命令永久的执行下去,断开 SSH 连接不会影响他的运行。
  • Command:要执行的命令。
  • Arg:一些参数,可以指定输出文件。
  • &:让命令在后台执行,终端退出后命令仍旧执行。

比如:

1
nohup ./myscript.sh &

在终端如果看到以下输出,并返回工作序号和 pid,说明运行成功:

1
2
[1] 166603
nohup: ignoring input and appending output to 'nohup.out'

输入 jobs 命令查看运行的工作:

1
2
jobs
# [1]+ Running nohup java -jar ./demo-interface-0.0.1-SNAPSHOT.jar &

nohup.out 记录有启动日志:

1
tail -500 nohup.out # 查看启动日志

若要停止运行,我们可以先找到进程号:

1
2
3
4
5
ps -aux | grep "myscript.sh"
# a:显示所有程序
# u:以用户为主的格式来显示
# x:显示所有程序,不区分终端机
# 也可以使用 ps -def | grep "myscript.sh"

第一个号码就是 PID。接下来使用 kill 命令删除。

1
2
kill -9 <PID>
# kill 程序可以向另外的进程发送任意的信号。上述命令表示发送信号9(SIGKILL)给指定的进程。

本文参考