nohup命令使用总结
nohup
命令的主要作用是允许用户在 Unix 和类 Unix 系统中运行长时间或需要持续运行的命令,即使用户退出了终端会话或关闭了终端窗口同时可以选择将日志输出到指定文件。
1.启动jar包的命令:
nohup java -jar your-application.jar > output.log 2>&1 & #到jar包目录再执行,没到目录也不报错,还返回进程号,所以你无法判断
output.log 是将输出写入的文件名。
2>&1 确保标准错误也写入同一个输出文件。
">"符号用于将命令的`标准输出`重定向到指定的文件中
outlog.log 表示将终端输出保存到outlog.log文件中
"2>"表示将命令的`标准错误`输出重定向到指定的文件中
2>&1 表示将命令的标准错误输出重定向到标准输出1中一起输出 (标准输出1指>outlog.log文件)
& 后台挂起
如果使用了 output.log作为名字
,可以使用以下命令查看输出:
tail -f output.log
#/dev/null 是 Unix 和类 Unix 操作系统中的一个特殊文件,它被称为“位桶”(bit bucket),因为它会丢弃所有写入它的数据。这个文件通常用于丢弃不需要的输出或重定向不需要的命令输出。当运行命令时,如果不需要查看输出,可以将输出重定向到 /dev/null
nohup java -jar your-application.jar >/dev/null &
注意,避免直接删除日志文件,会造成服务无法输出日志,服务异常直接停止运行
不停止服务,清空nohup.out文件方法:
第一种:
cat /dev/null > nohup.out
第二种:
cp /dev/null nohup.out
输出的日志过多容易增大磁盘压力,可以只输出错误信息:
nohup java -jar your-application.jar > /dev/null 2>error.log & #输出到error.log
什么日志都不输出:
nohup java -jar your-application.jar > /dev/null 2>&1 & #同上
查看进程:
ps -aux | grep java
参数说明:
- a: 显示所有程序
- u: 以用户为主的格式来显示
- x: 显示所有程序,不区分终端机
有以下特殊情况:
在 Linux 系统中,ps -aux
命令用来显示当前系统中的进程状态。当你执行 ps -aux | grep java
命令时,实际上是在查找所有包含 “Java” 字符串的进程。然而,这个命令本身也会创建一个新的进程,即执行 grep
命令的进程。这就是为什么你会看到每次执行命令时,显示的进程列表中都有一个 grep java
的进程,而且它的 PID(进程ID)每次都不同。
这里解释一下这个过程:
- 你执行
ps -aux | grep java
命令。 - 系统首先执行
ps -aux
命令,列出所有进程。 - 然后,系统将
ps -aux
的输出作为grep java
的输入。 grep java
命令开始运行,搜索包含 “Java” 的行。- 因为
grep java
命令是新启动的,所以它也会出现在进程列表中,显示为一个新的进程。
如果你想要查看实际运行的 Java 进程,而不是 grep
命令本身,你应该使用以下命令:
ps -aux | grep '[j]ava'
这里的 `[j]` 确保 `grep` 只匹配 "java" 而不是 "grep java" 中的 "java"。这样,你就不会看到 `grep` 命令的进程本身了。
终止进程:
使用 kill
命令可以终止 nohup
启动的进程。
kill 进程pid
kill -9 进程pid #强制结束进程