首页 > 系统相关 >通过linux etc/init.d 来执行springboot jar

通过linux etc/init.d 来执行springboot jar

时间:2023-11-16 17:26:19浏览次数:49  
标签:task springboot service ++ apps jar etc taskService

今天解开了一个困扰我好久的问题,我们的项目到底是怎么执行的?为什么把项目的jar包scp到服务器,然后再创建一个同名的conf文件,之后建立一个软连接就可以start和stop了?
image.png
image.png

springboot jar和普通jar的区别

  1. springboot jar是可执行的 不可以被其他项目依赖的
  2. 普通jar是不可执行的 是可以被其他项目依赖的
  3. springboot jar 结构

jar -xvf task-service.jar
image.png
分了三部分:

  1. BOOT-INF 这里面是我们的class文件和项目依赖的jar包
  2. META-INF 里有个重要的文件MANIFEST.MF

image.png
指明了start-class 启动类,和其他一些信息,暂时不是很明白 尴尬

  1. org 里面存放的是SpringBoot启动所要依据的类

image.png

  1. 普通jar结构

jar -xvf task.jar
image.png
可以看到只有本项目的原码 也不包含项目的依赖

springboo jar 可以在linux 的/etc/init.d 下执行

使用vim task-service.jar 可以看出在文件前面就是可以执行的脚本,这个脚本来源于 spring-boot-tools 下的spring-boot-loader-tools下的launch.script文件
image.png
有了这个脚本,所以可以使用/etc/init.d/taskService 执行springboot项目
通过bash -x查看脚本执行过程
bash -x /etc/init.d/taskService start

+ [[ -n '' ]]
++ pwd
+ WORKING_DIR=/etc/init.d
+ [[ -n '' ]]
+ [[ -n '' ]]
++ dirname /etc/init.d/taskService
+ cd /etc/init.d
+ [[ -z '' ]]
++ pwd
++ basename /etc/init.d/taskService
+ jarfile=/etc/init.d/taskService
+ [[ -L /etc/init.d/taskService ]]
+ [[ /etc/init.d/taskService =~ init\.d ]]
++ basename /etc/init.d/taskService
+ init_script=taskService
++ readlink /etc/init.d/taskService
+ jarfile=/apps/task-service/task-service.jar
++ dirname /apps/task-service/task-service.jar
+ cd /apps/task-service
++ pwd
++ basename /apps/task-service/task-service.jar
+ jarfile=/apps/task-service/task-service.jar
+ [[ -L /apps/task-service/task-service.jar ]]
+++ dirname /apps/task-service/task-service.jar
++ cd /apps/task-service
++ pwd -P
+ jarfolder=/apps/task-service
+ cd /etc/init.d
++ basename /apps/task-service/task-service.conf
+ configfile=task-service.conf
+ [[ -z '' ]]
+ CONF_FOLDER=/apps/task-service
+ [[ -r /apps/task-service/task-service.conf ]]
+ source /apps/task-service/task-service.conf
++ JAVA_HOME=/usr/local/java/jdk1.8.0_101
++ JAVA_OPTS='-Dfile.encoding=UTF-8 -Duser.language=zh -Duser.region=CN -Xmx1024M -Xms1024M
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=30119'
++ LOG_FOLDER=/logs/task-service
++ PID_FOLDER=/hvyogo/pid
+ [[ -z /hvyogo/pid ]]
+ [[ -z /logs/task-service ]]
+ [[ /hvyogo/pid == /* ]]
+ [[ /logs/task-service == /* ]]
+ [[ -x /hvyogo/pid ]]
+ [[ -x /logs/task-service ]]
+ [[ -z '' ]]
+ MODE=auto
+ [[ -z '' ]]
+ USE_START_STOP_DAEMON=true
+ [[ -z '' ]]
+ [[ -n taskService ]]
+ identity=taskService
+ [[ -z '' ]]
+ LOG_FILENAME=taskService.log
+ [[ -z '' ]]
+ STOP_WAIT_TIME=60
+ action=run
+ [[ auto == \a\u\t\o ]]
+ [[ -n taskService ]]
+ action=start
+ shift
+ PID_FOLDER=/hvyogo/pid/taskService
+ pid_file=/hvyogo/pid/taskService/taskService.pid
+ log_file=/logs/task-service/taskService.log
++ id -u
+ [[ 1005 == \0 ]]
+ [[ -n '' ]]
++ id -u
+ [[ 1005 == \0 ]]
+ [[ -n /usr/local/java/jdk1.8.0_101 ]]
+ [[ -x /usr/local/java/jdk1.8.0_101/bin/java ]]
+ javaexe=/usr/local/java/jdk1.8.0_101/bin/java
+ arguments=(-Dsun.misc.URLClassPath.disableJarChecking=true $JAVA_OPTS -jar "$jarfile" $RUN_ARGS "$@")
+ case "$action" in
+ start
+ [[ -f /hvyogo/pid/taskService/taskService.pid ]]
+ do_start
++ dirname /apps/task-service/task-service.jar
+ working_dir=/apps/task-service
+ pushd /apps/task-service
+ [[ ! -e /hvyogo/pid/taskService ]]
+ [[ ! -e /logs/task-service/taskService.log ]]
+ [[ -n '' ]]
+ checkPermissions
+ touch /hvyogo/pid/taskService/taskService.pid
+ touch /logs/task-service/taskService.log
+ pid=18401
+ disown 18401
+ echo 18401
+ [[ -z 18401 ]]
+ echoGreen 'Started [18401]'
+ /usr/local/java/jdk1.8.0_101/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.region=CN -Xmx1024M -Xms1024M -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=30119 -jar /apps/task-service/task-service.jar
+ echo 'Started [18401]'
Started [18401]
+ exit 0

可以看到最终执行的是

  • /usr/local/java/jdk1.8.0_101/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.region=CN -Xmx1024M -Xms1024M -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=30119 -jar /apps/task-service/task-service.jar

标签:task,springboot,service,++,apps,jar,etc,taskService
From: https://www.cnblogs.com/bfyq/p/17836779.html

相关文章

  • 部署单节点etcd
    1.下载并安装etcdETCD_VERSION='3.4.13'wgethttps://github.com/etcd-io/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-amd64.tar.gztar-xvfetcd-v${ETCD_VERSION}-linux-amd64.tar.gzmvetcd-v${ETCD_VERSION}-linux-amd64/opt/etcd......
  • 利用leafletCN包在R里绘制可交互地图(叠加高德地图替代)
    Leaflet是一个开源并且对移动端友好的交互式地图JavaScript库。在R语言中也使用相应的leaflet包调用。然而,在国内,一些国外的地图资源在加载或使用中会存在问题。为此,需要一个适应国情的扩展包leafletCN(GitHub-Lchiffon/leafletCN:AnRgalleryforChinaandothergeoj......
  • .NetCore Ocelot
    参考:https://blog.51cto.com/u_13746169/5876532Nuget包:OcelotOcelot.Provider.ConsulOcelot.Provider.PollyOcelot.Cache.CacheManager 程序包管理器控制台CLIInstall-PackageOcelot-Version16.0.1Install-PackageOcelot.Provider.Consul-Version16.0.1Install-Packag......
  • SpringBoot 中大文件(分片上传)断点续传与极速秒传功能的实现
    1.背景在实际项目中,我们经常会遇到需要上传大文件的情况,常见的方法是将整个文件一次性上传,在文件较大时会出现上传速度慢或者可能导致上传失败等问题。针对这种情况,通常可以采用分片上传的方式,将文件分为多个小片段进行上传,降低单个上传请求的负载,提高上传效率。同时,考虑到用户......
  • 修改/etc/docker/daemon.json中的log-opts配置发现无效 docker 限制日志大小
    https://colobu.com/2018/10/22/no-space-left-on-device-for-docker/在/etc/docker/daemon.json中修改或添加log-opts参数"log-driver":"json-file","log-opts":{"max-size":"50m","max-file":"3"}网上很......
  • springboot大文件上传、分片上传、断点续传、秒传的实现
    本篇攻略将详细介绍如何使用SpringBoot实现大文件上传、分片上传、断点续传和秒传功能。为方便阅读,本文将分为以下几个部分:介绍大文件上传、分片上传、断点续传和秒传的概念详细分析如何实现大文件上传、分片上传、断点续传和秒传功能给出两个示例来说明如何实现大文件上传和......
  • 使用exe4j软件将打包好的jar包转成exe文件
    链接在此相关教程跳转我的实践(请忽略项目名称)......
  • SpringBoot
    一、简介SpringBoot是Spring公司的一个顶级项目,和SpringFramework是一个级别的。不需要编写xml配置文件,通过利用pringFramework4自动配置特性完成配置。启动器就是引入相关的依赖,通过java配置的方式完成自动配置。1.特征使用SpringBoot可以创建独立的Spring应......
  • day130-springboot的各种配置与应用
    编写springboot应用看官方文档DevelopingwithSpringBoot查看场景依赖,引入对应自动配置的场景,编写配置文件中debug=true开启自动配置报告。Negative(不生效)Positive(生效)Lombok的应用Lombok用标签方式代替构造器、getter/setter、toString()等鸡肋代码。引入依赖......
  • SpringBoot模拟插入1000000万条数据
    一、数据库表准备CREATETABLE`student`(`id`bigintNOTNULLCOMMENT'用户id',`name`varchar(50)COLLATEutf8mb4_general_ciDEFAULTNULLCOMMENT'姓名',`address`varchar(250)COLLATEutf8mb4_general_ciDEFAULTNULLCOMMENT'地址'......