服务器启动jar包详解

时间:2024-03-09 11:44:14

场景

在服务器上面部署springboot的项目的时候,一般都是通过执行jar包的方式去启动容器的,但是不能直接java -jar执行,因为这样控制台输出都会在jekins里面展示,这样jekins就一直结束不了,我亲测过,哈哈!

我们当时执行jar方式

现在部署一般是走jekins的,有的喜欢直接在jekins里面写部署命令,就是将jar包通过scp命令拷贝到部署服务器上面任何通过ssh执行命令,有的是通过在拷贝到指定jar包的服务器上面写shell脚本,然后jekins里面直接执行指定脚本就好了…都差不多,看个人喜好了.

nohup java -Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888 -jar test.jar --spring.profiles.active=dev --server.port=9001  > /log/test.out 2>&1 &

-Xdebug的话就是远程连接项目,可以参考:https://blog.csdn.net/qq_38366063/article/details/98059432
java -jar XXX.jar 就是启动java,执行jar里面指定的main方法.也没啥说的
–spring.profiles.active=dev --server.port=9001这两个是启动对应环境的配置文件,和指定端口.
最后就是nohup command>/dev/null 2>&1 &这个了,我那命令是将/dev/null换成自己的文件.

详解nohup &

nohup XXX &这两个命令组合就是将执行的命令放在后台去执行,相当于java中在起一个线程去后台执行,主线程执行完成,它还会接着执行.个人理解,不喜勿喷.

详解2>&1

2,1数字代表啥呢?
操作系统中有三个常用的流:
  0:标准输入流 stdin
  1:标准输出流 stdout
  2:标准错误流 stderr
  一般当我们用 > console.txt,实际是 1>console.txt的省略用法;< console.txt ,实际是 0 < console.txt的省略用法。
标准输出流,错误流,嗯?syso?不就是java中的
System.out.println("");
System.err.println("");
所以在代码中直接System.out.println("");会打印到指定文件的.不过一般都是走日志文件.
那么2>&1呢?就是错误流也打印到1里面去.恩.是这样的

> /log/test.out

这个的话就是将执行的命令各种输出流指定到文件.
不过有时候是>/dev/null是啥意思呢?
/dev/null这个文件是只写文件,你读不了的
那不就相当于抛弃了吗,/dev/null理解为黑洞,只进不出就好了,意思是不要任何输出文件了.