linux 退出 java -jar 后台执行
这里的linux退出,指的是linux(退出管理工具),非注销登陆。
java -jar xxx.jar 即刻启动jar包,能看到输出的日志。linux 退出后会关闭该执行。
java -jar xxx.jar & 即刻在后台启动jar包,看不到到输出的日志。linux 退出后会关闭该执行。
如何保证jar包执行后,退出linux,jar包不会随之关闭,导致项目无法访问
此处我们需要使用到nohup
nohup
用途:不挂断的运行命令
语法:nohup Command [ Arg … ] [ & ]
&
用途:在后台运行
一般两个一起用
nohup command &
eg:nohup java -jar xxx.jar >log.txt &
。这种方式会在jar目录下生成log.txt。这里我们先查看当前项目是否还在运行:ps -ef | grep xxx.jar
,可以看到如下结果(例图):
grep 类型 的是默认的,我们主要处理的是java类型的,执行kill -9 11858
再次执行ps -ef | grep xxx.jar就只能查到grep 类型的了。
后台启动时 使用 nohup java -jar xxx.jar >/log/log.txt 2>&1 &
第一个>后面是你的入职输出路径
第二个> 后面的 2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。
最后一个& , 是让该命令在后台执行。
对 于& 1 更准确的说应该是文件描述符 1,
1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.
他标准输出到all_result ,然后复制标准输出到文件描述符2(STDERR_FILENO),
其后果就是文件描述符1和2指向同一个文件表项,也可以说错误的输出被合并了.
其中0 表示键盘输入 1表示屏幕输出 2表示错误输出.把标准出错重定向到标准输出,
然后扔到/log 下面去。
/log/log.txt 2>&1 &
是将command的输出重定向到/log/log.txt ,即输出的内容不会打印到当前屏幕,而是输出到了/log/log.txt 文件中。
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
屏蔽输出,起到禁止输出作用:/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;
如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
“> /log/log.txt 2>&1” :表示将 stdout 和 stderr 合并后重定向到 /log/log.txt
启动指派给指定的端口:
nohup java -jar xxx.jar --server.port:80>/log/log.txt 2>&1 &