PageSourceSearch

https://www.cxyroad.com/assets/1254.html-Dhaum4e-.js

js cxyroad.com collected 2026-10-05 07:44:19 UTC 36,319 bytes, 1 lines download raw bytes

1import{_ as n,c as t,b as s,a as i,r as e,o as p}from"./app-ptP_sHHm.js";const o={};function r(l,a){const m=e("CxyAdSense");return p(),t("div",null,[a[0]||(a[0]=s('<blockquote><p>原文图片已缺失</p></blockquote><p>程序员的成长之路</p><p>互联网/程序员/技术/资料共享</p><p><a href="https://mp.weixin.qq.com/s?__biz=MzUyNDkzNzczNQ==&amp;mid=2247487442&amp;idx=3&amp;sn=61e758d4bf9f15a3419fd028146469a3&amp;chksm=fa24f0bacd5379ac93d74ffebac826d2401fd494f82e900e5102a8bf968f108e4ec72a4ad548&amp;token=1854383306&amp;lang=zh_CN&amp;scene=21#wechat_redirect" target="_blank" rel="noopener noreferrer">关注</a></p><p>阅读本文大概需要 8.4 分钟。</p><p>作者:神牛003</p><p>来源:cnblogs.com/wangrudong003/p/10502043.html</p><p>本篇和大家分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell程序启动工具,希望能便利工作;</p><ul><li><p>profiles指定不同环境的配置</p></li><li><p>maven-assembly-plugin打发布压缩包</p></li><li><p>分享shenniu_publish.sh程序启动工具</p></li><li><p>linux上使用shenniu_publish.sh启动程序</p></li></ul><h2 id="profiles指定不同环境的配置" tabindex="-1"><a class="header-anchor" href="#profiles指定不同环境的配置"><span><strong># profiles指定不同环境的配置</strong></span></a></h2><p>通常一套程序分为了很多个部署环境:开发,测试,uat,线上 等,我们要想对这些环境区分配置文件,可以通过两种方式:</p><ul><li><p>通过application.yml中编码指定 profile.active=uat 方式指定</p></li><li><p>通过mvn中profiles来区分不同环境对应的配置文件夹,人工可以手动在idea勾选生成不同环境的包(推荐)</p></li></ul><p>这里我们要讲的是第二种,首先在mvn中配置如下内容:</p><p><code>node``node``${scripts_packageName}``${scripts_bootMain}``true``node1``node1``${scripts_packageName}``${scripts_bootMain}``node2``node2``${scripts_packageName}``${scripts_bootMain}</code></p><p>节点粗解:</p><ul><li><p>id:用来指定不同环境配置文件所在的目录,如下我这里:&gt; 原文图片已缺失</p></li><li><p>properties:该节点中的节点是可作为参数传递给其他配置文件,如我这里的package-name节点值就可以在另外的assembly.xml或者shell脚本文件中通过${package-name}获取到,如下:&gt; 原文图片已缺失</p></li><li><p>activeByDefault:指定默认环境配置文件夹</p></li></ul><h2 id="maven-assembly-plugin打发布压缩包" tabindex="-1"><a class="header-anchor" href="#maven-assembly-plugin打发布压缩包"><span><strong># maven-assembly-plugin打发布压缩包</strong></span></a></h2><p>对于springboot程序打包,可以分为jar和war,这里是jar包;有场景是咋们配置文件或者第三方等依赖包不想放到工程jar中,并且把这些文件压缩成一个zip包,方便上传到linux;此时通过maven-assembly-plugin和maven-jar-plugin就可以做到,mvn的配置如:</p><p><code>org.apache.maven.plugins``maven-jar-plugin``2.6``false``true``lib/``${scripts_bootMain}``**/*.yml``**/*.properties``**/*.xml``**/*.sh``make-a-jar``compile``jar``org.apache.maven.plugins``maven-assembly-plugin``2.4``${project.basedir}/src/main/assembly/assembly.xml``make-assembly``package``single</code></p><p>值得注意的地方如下几点:</p><ul><li><p>mainClass节点:用来指定启动main函数入口类路径,如这里的:com.sm.EurekaServerApplication</p></li><li><p>excludes节点:排除主jar包中配置等一些列后缀文件,因为我们要包这些配置文件放到主包外面</p></li><li><p>descriptor节点:用来指定assembly插件对应的assembly.xml配置文件</p></li></ul><p>有了上面mvn配置,我们还需要assembly.xml的配置,这里提取了结合shell脚本发布程序的配置:</p><p><code>xsi:schemaLocation=&quot;http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd``http://maven.apache.org/ASSEMBLY/2.0.0 &quot;``${activeProfile}``zip``false``false``${package-name}-${activeProfile}/lib``false``${project.basedir}/src/main/profiles/${activeProfile}``${package-name}-${activeProfile}/conf``**/*``*.xml--&gt;``*.properties--&gt;``*.yml--&gt;``${project.basedir}/src/main/scripts``**/*``777``777``true``${project.build.directory}``${package-name}-${activeProfile}/``*.jar</code></p><p><strong>重点节点介绍:</strong></p><ul><li><p>formats节点:把配置文件和jar包等压缩成什么文件格式,这里可以有:zip,tar等</p></li><li><p>fileMode节点:指定scripts目录下脚本文件(这里是:shenniu_publish.sh)在linux上文件权限为777</p></li><li><p>filtered节点:脚本中参数变量为pom的profiles中properties的值(该配置,是把mvn中属性值映射生成到sh文件中,如:${package-name})</p></li></ul><p>完成上面配置后,此时我们可以通过idea上勾选切换不同环境来打zip包,如图:</p><blockquote><p>原文图片已缺失</p></blockquote><h2 id="分享shenniu-publish-sh程序启动工具" tabindex="-1"><a class="header-anchor" href="#分享shenniu-publish-sh程序启动工具"><span><strong># 分享shenniu_publish.sh程序启动工具</strong></span></a></h2><p>上面步骤完成了zip格式的发布包,我们再分享下启动程序的shell脚本,该脚本具有的功能。</p>',29)),i(m,{"ad-slot":"9852811733",placement:"inline"}),a[1]||(a[1]=s('<ul><li><p>解压zip+启动jar包</p></li><li><p>启动jar包</p></li><li><p>停止对应jar运行</p></li><li><p>重启jar程序</p></li></ul><p>目前该shell中封装了两种启动jar命令的方式:</p><ul><li><p>java -cp</p></li><li><p>java -jar</p></li></ul><p>如图命令格式:</p><blockquote><p>原文图片已缺失</p></blockquote><p>来看全部的shell代码:</p><p><code>#!/usr/bin/env bash``#可变参数变量``languageType=&quot;javac&quot; #支持 java,javac,netcore 发布``#参数值由pom文件传递``baseZipName=&quot;${package-name}-${activeProfile}&quot; #压缩包名称 publish-test.zip的publish``packageName=&quot;${package-name}&quot; #命令启动包名 xx.jar的xx``mainclass=&quot;${boot-main}&quot; #java -cp启动时,指定main入口类;命令:java -cp conf;lib*.jar;${packageName}.jar ${mainclass}``#例子``# baseZipName=&quot;publish-test&quot; #压缩包名称 publish-test.zip的publish``# packageName=&quot;publish&quot; #命令启动包名 publish.jar的xx``#固定变量```basePath=$(cd </code>dirname <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mi mathvariant="normal">‘</mi><mi mathvariant="normal">/</mi><mo separator="true">;</mo><mi>p</mi><mi>w</mi><mi>d</mi><mo stretchy="false">)</mo>
1<mi mathvariant="normal">‘</mi><mi mathvariant="normal">‘</mi><mi mathvariant="normal">‘</mi><mi>b</mi><mi>a</mi><mi>s</mi><mi>e</mi><mi>Z</mi><mi>i</mi><mi>p</mi><mi>P</mi><mi>a</mi><mi>t</mi><mi>h</mi><mo>=</mo><mi mathvariant="normal">&quot;</mi></mrow><annotation encoding="application/x-tex">0`/; pwd)```baseZipPath=&quot;</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0‘/</span><span class="mpunct">;</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.02691em;">pw</span><span class="mord mathnormal">d</span><span class="mclose">)</span><span class="mord">‘‘‘</span><span class="mord mathnormal">ba</span><span class="mord mathnormal">se</span><span class="mord mathnormal" style="margin-right:0.07153em;">Z</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.13889em;">pP</span><span class="mord mathnormal">a</span><span class="mord mathnormal">t</span><span class="mord mathnormal">h</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord">&quot;</span></span></span></span>{basePath}/<span class="katex-error" title="ParseError: KaTeX parse error: Expected &#39;EOF&#39;, got &#39;#&#39; at position 20: …eZipName}.zip&quot; #̲压缩包路径``baseDirP…" style="color:#cc0000;">{baseZipName}.zip&quot; #压缩包路径``baseDirPath=&quot;</span>{basePath}&quot; #解压部署磁盘路径<code>pid= #进程pid</code>#解压<code>function shenniu_unzip()</code>{<code>echo &quot;解压---------------------------------------------&quot;</code>echo &quot;压缩包路径:${baseZipPath}&quot;<code>if [ ! `find ${baseZipPath}` ]</code>then<code>echo &quot;不存在压缩包:${baseZipPath}&quot;</code>else<code>echo &quot;解压磁盘路径:${baseDirPath}/${baseZipName}&quot;</code>echo &quot;开始解压...&quot;<code>#解压命令</code>unzip -od <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>b</mi><mi>a</mi><mi>s</mi><mi>e</mi><mi>D</mi><mi>i</mi><mi>r</mi><mi>P</mi><mi>a</mi><mi>t</mi><mi>h</mi></mrow><mi mathvariant="normal">/</mi></mrow><annotation encoding="application/x-tex">{baseDirPath}/</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">ba</span><span class="mord mathnormal" style="margin-right:0.02778em;">seD</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal" style="margin-right:0.13889em;">P</span><span class="mord mathnormal">a</span><span class="mord mathnormal">t</span><span class="mord mathnormal">h</span></span><span class="mord">/</span></span></span></span>{baseZipName} ${baseZipPath}<code>#设置执行权限</code>chmod +x <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>b</mi><mi>a</mi><mi>s</mi><mi>e</mi><mi>D</mi><mi>i</mi><mi>r</mi><mi>P</mi><mi>a</mi><mi>t</mi><mi>h</mi></mrow><mi mathvariant="normal">/</mi></mrow><annotation encoding="application/x-tex">{baseDirPath}/</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">ba</span><span class="mord mathnormal" style="margin-right:0.02778em;">seD</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal" style="margin-right:0.13889em;">P</span><span class="mord mathnormal">a</span><span class="mord mathnormal">t</span><span class="mord mathnormal">h</span></span><span class="mord">/</span></span></span></span>{baseZipName}/${packageName}<code>echo &quot;解压完成。&quot;</code>fi<code>}</code>#检测pid<code>function getPid()</code>{<code>echo &quot;检测状态---------------------------------------------&quot;```pid=`ps -ef | grep -n ${packageName} | grep -v grep | awk &#39;{print $2}&#39;````if [ ${pid} ]</code>then<code>echo &quot;运行pid:${pid}&quot;</code>else<code>echo &quot;未运行&quot;</code>fi<code>}</code>#启动程序<code>function start()</code>{<code>#启动前,先停止之前的</code>stop<code>if [ ${pid} ]</code>then<code>echo &quot;停止程序失败,无法启动&quot;</code>else<code>echo &quot;启动程序---------------------------------------------&quot;</code>#选择语言类型<code>read -p &quot;输入程序类型(java,javac,netcore),下一步按回车键(默认:${languageType}):&quot; read_languageType</code>if [ <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>r</mi><mi>e</mi><mi>a</mi><msub><mi>d</mi><mi>l</mi></msub><mi>a</mi><mi>n</mi><mi>
1g</mi><mi>u</mi><mi>a</mi><mi>g</mi><mi>e</mi><mi>T</mi><mi>y</mi><mi>p</mi><mi>e</mi></mrow><mo stretchy="false">]</mo><mi mathvariant="normal">‘</mi><mi mathvariant="normal">‘</mi><mi>t</mi><mi>h</mi><mi>e</mi><mi>n</mi><mi mathvariant="normal">‘</mi><mi mathvariant="normal">‘</mi><mi>l</mi><mi>a</mi><mi>n</mi><mi>g</mi><mi>u</mi><mi>a</mi><mi>g</mi><mi>e</mi><mi>T</mi><mi>y</mi><mi>p</mi><mi>e</mi><mo>=</mo></mrow><annotation encoding="application/x-tex">{read_languageType} ]``then``languageType=</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">re</span><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathnormal">an</span><span class="mord mathnormal">gu</span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord mathnormal">e</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mord mathnormal">p</span><span class="mord mathnormal">e</span></span><span class="mclose">]</span><span class="mord">‘‘</span><span class="mord mathnormal">t</span><span class="mord mathnormal">h</span><span class="mord mathnormal">e</span><span class="mord mathnormal">n</span><span class="mord">‘‘</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">an</span><span class="mord mathnormal">gu</span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord mathnormal">e</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mord mathnormal">p</span><span class="mord mathnormal">e</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span></span></span></span>{read_languageType}``fi``echo &quot;选择程序类型:${languageType}&quot;``#进入运行包目录``cd <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>b</mi><mi>a</mi><mi>s</mi><mi>e</mi><mi>D</mi><mi>i</mi><mi>r</mi><mi>P</mi><mi>a</mi><mi>t</mi><mi>h</mi></mrow><mi mathvariant="normal">/</mi></mrow><annotation encoding="application/x-tex">{baseDirPath}/</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">ba</span><span class="mord mathnormal" style="margin-right:0.02778em;">seD</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal" style="margin-right:0.13889em;">P</span><span class="mord mathnormal">a</span><span class="mord mathnormal">t</span><span class="mord mathnormal">h</span></span><span class="mord">/</span></span></span></span>{baseZipName}``#分类启动``if [ &quot;${languageType}&quot; == &quot;javac&quot; ]``then``if [ <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>m</mi><mi>a</mi><mi>i</mi><mi>n</mi><mi>c</mi><mi>l</mi><mi>a</mi><mi>s</mi><mi>s</mi></mrow><mo stretchy="false">]</mo>
1<mi mathvariant="normal">‘</mi><mi mathvariant="normal">‘</mi><mi>t</mi><mi>h</mi><mi>e</mi><mi>n</mi><mi mathvariant="normal">‘</mi><mi mathvariant="normal">‘</mi><mi>n</mi><mi>o</mi><mi>h</mi><mi>u</mi><mi>p</mi><mi>j</mi><mi>a</mi><mi>v</mi><mi>a</mi><mo>−</mo><mi>c</mi><mi>p</mi><mi>c</mi><mi>o</mi><mi>n</mi><mi>f</mi><mo>:</mo><mi>l</mi><mi>i</mi><mi>b</mi><mo>∗</mo><mi mathvariant="normal">.</mi><mi>j</mi><mi>a</mi><mi>r</mi><mo>:</mo></mrow><annotation encoding="application/x-tex">{mainclass} ]``then``nohup java -cp conf:lib*.jar:</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">main</span><span class="mord mathnormal">c</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">ss</span></span><span class="mclose">]</span><span class="mord">‘‘</span><span class="mord mathnormal">t</span><span class="mord mathnormal">h</span><span class="mord mathnormal">e</span><span class="mord mathnormal">n</span><span class="mord">‘‘</span><span class="mord mathnormal">n</span><span class="mord mathnormal">o</span><span class="mord mathnormal">h</span><span class="mord mathnormal">u</span><span class="mord mathnormal">p</span><span class="mord mathnormal">ja</span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">c</span><span class="mord mathnormal">p</span><span class="mord mathnormal">co</span><span class="mord mathnormal">n</span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">:</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">ib</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord">.</span><span class="mord mathnormal">ja</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">:</span></span></span></span>{packageName}.jar <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>m</mi><mi>a</mi><mi>i</mi><mi>n</mi><mi>c</mi><mi>l</mi><mi>a</mi><mi>s</mi><mi>s</mi></mrow><mo>&gt;</mo></mrow><annotation encoding="application/x-tex">{mainclass} &gt;</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.0391em;"></span><span class="mord"><span class="mord mathnormal">main</span><span class="mord mathnormal">c</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">ss</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span></span></span></span>{baseDirPath}/<span class="katex-error" title="ParseError: KaTeX parse error: Expected &#39;EOF&#39;, got &#39;&amp;&#39; at position 21: …ageName}.out 2&gt;&amp;̲1 &amp;``#nohup jav…" style="color:#cc0000;">{packageName}.out 2&gt;&amp;1 &amp;``#nohup java -cp conf:lib*.jar:</span>{packageName}.jar <span class="katex-error" title="ParseError: KaTeX parse error: Expected &#39;EOF&#39;, got &#39;&amp;&#39; at position 26: …} &gt;/dev/null 2&gt;&amp;̲1 &amp;``fi``elif […" style="color:#cc0000;">{mainclass} &gt;/dev/null 2&gt;&amp;1 &amp;``fi``elif [ &quot;</span>{languageType}&quot; == &quot;java&quot;
1 ]``then``nohup java -jar <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>b</mi><mi>a</mi><mi>s</mi><mi>e</mi><mi>D</mi><mi>i</mi><mi>r</mi><mi>P</mi><mi>a</mi><mi>t</mi><mi>h</mi></mrow><mi mathvariant="normal">/</mi></mrow><annotation encoding="application/x-tex">{baseDirPath}/</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">ba</span><span class="mord mathnormal" style="margin-right:0.02778em;">seD</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal" style="margin-right:0.13889em;">P</span><span class="mord mathnormal">a</span><span class="mord mathnormal">t</span><span class="mord mathnormal">h</span></span><span class="mord">/</span></span></span></span>{baseZipName}/${packageName}.jar &gt;/dev/null 2&gt;&amp;1 &amp;``# java -jar <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>b</mi><mi>a</mi><mi>s</mi><mi>e</mi><mi>D</mi><mi>i</mi><mi>r</mi><mi>P</mi><mi>a</mi><mi>t</mi><mi>h</mi></mrow><mi mathvariant="normal">/</mi></mrow><annotation encoding="application/x-tex">{baseDirPath}/</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">ba</span><span class="mord mathnormal" style="margin-right:0.02778em;">seD</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal" style="margin-right:0.13889em;">P</span><span class="mord mathnormal">a</span><span class="mord mathnormal">t</span><span class="mord mathnormal">h</span></span><span class="mord">/</span></span></span></span>{baseZipName}/<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>p</mi><mi>a</mi><mi>c</mi><mi>k</mi><mi>a</mi><mi>g</mi><mi>e</mi><mi>N</mi><mi>a</mi><mi>m</mi><mi>e</mi></mrow><mi mathvariant="normal">.</mi><mi>j</mi><mi>a</mi><mi>r</mi><mi mathvariant="normal">‘</mi><mi mathvariant="normal">‘</mi><mi>e</mi><mi>l</mi><mi>i</mi><mi>f</mi><mo stretchy="false">[</mo><mi mathvariant="normal">&quot;</mi></mrow><annotation encoding="application/x-tex">{packageName}.jar``elif [ &quot;</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="mord mathnormal">a</span><span class="mord mathnormal">c</span><span class="mord mathnormal">ka</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord mathnormal">e</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal">am</span><span class="mord mathnormal">e</span></span><span class="mord">.</span><span class="mord mathnormal">ja</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord">‘‘</span><span class="mord mathnormal">e</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">[</span><span class="mord">&quot;</span></span></span></span>{languageType}&quot; == &quot;netcore&quot; ]``then``#nohup dotnet run <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>b</mi><mi>a</mi><mi>s</mi><mi>e</mi><mi>D</mi><mi>i</mi><mi>r</mi><mi>P</mi><mi>a</mi><mi>t</mi><mi>h</mi></mrow><mi mathvariant="normal">/</mi></mrow><annotation encoding="application/x-tex">{baseDirPath}/</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">ba</span><span class="mord mathnormal" style="margin-right:0.02778em;">seD</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal" style="margin-right:0.13889em;">P</span><span class="mord mathnormal">a</span><span class="mord mathnormal">t</span><span class="mord mathnormal">h</span></span><span class="mord">/</span></span></span></span>{baseZipName}/${packageName} &gt;/dev/null 2&gt;&amp;1 &amp;``nohup <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>b</mi><mi>a</mi><mi>s</mi><mi>e</mi><mi>D</mi><mi>i</mi><mi>r</mi><mi>P</mi><mi>a</mi><mi>t</mi><mi>h</mi></mrow><mi mathvariant="normal">/</mi></mrow><annotation encoding="application/x-tex">{baseDirPath}/</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">ba</span><span class="mord mathnormal" style="margin-right:0.02778em;">seD</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal" style="margin-right:0.13889em;">P</span><span class="mord mathnormal">a</span><span class="mord mathnormal">t</span><span class="mord mathnormal">h</span></span><span class="mord">/</span></span></span></span>{baseZipName}/${packageName} &gt;/dev/null 2&gt;&amp;1 &amp;``fi``#查询是否有启动进程``getPid``if [ ${pid} ]``then``echo &quot;已启动&quot;``#nohup日志 tail -n 50 -f <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>b</mi><mi>a</mi><mi>s</mi><mi>e</mi><mi>D</mi><mi>i</mi><mi>r</mi><mi>P</mi><mi>a</mi><mi>t</mi><mi>h</mi></mrow><mi mathvariant="normal">/</mi></mrow><annotation encoding="application/x-tex">{baseDirPath}/</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">ba</span><span class="mord mathnormal" style="margin-right:0.02778em;">seD</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal" style="margin-right:0.13889em;">P</span><span class="mord mathnormal">a</span><span class="mord mathnormal">t</span><span class="mord mathnormal">h</span></span><span class="mord">/</span></span></span></span>{packageName}.out``else``echo &quot;启动失败&quot;``fi``fi``}``#停止程序``function stop()``{``getPid``if [ ${pid} ]``then``echo &quot;停止程序---------------------------------------------&quot;``kill -9 ${pid}``getPid``if [ ${pid} ]``then``#stop``echo &quot;停止失败&quot;``else``echo &quot;停止成功&quot;``fi``fi``}``#启动时带参数,根据参数执行``if [ ${#} -ge 1 ]``then``case <span class="katex-error" title="ParseError: KaTeX parse error: Expected &#39;EOF&#39;, got &#39;#&#39; at position 82: …`;;``&quot;unzip&quot;)``#̲执行解压``shenniu_u…" style="color:#cc0000;">{1} in``&quot;start&quot;)``start``;;``&quot;restart&quot;)``start``;;``&quot;stop&quot;)``stop``;;``&quot;unzip&quot;)``#执行解压``shenniu_unzip``#执行启动``start``;;``*)``echo &quot;</span>{1}无任何操作&quot;``;;``esac``else``echo &quot;``command如下命令:``unzip:解压并启动``start:启动``stop:å
1œæ­¢è¿›ç¨‹``restart:重启``示例命令如:./shenniu_publish start``&quot;``fi`</p><p>正如上面小节说的,shell中的参数 package-name,activeProfile,boot-main 都是由mvn中profiles的properties中提供,是可变的参数,脚本代码本身不需要人工去修改,只需要变的是mvn的参数即可;其实在我们生成zip包的时候,shell中的参数就被替换了,可以看zip中shell文件内容如:</p><blockquote><p>原文图片已缺失</p></blockquote><h2 id="linux上使用shenniu-publish-sh启动程序" tabindex="-1"><a class="header-anchor" href="#linux上使用shenniu-publish-sh启动程序"><span><strong># linux上使用shenniu_publish.sh启动程序</strong></span></a></h2><p>把生成的zip上传到linux上,通过命令解压:</p><p><code>unzip -od eureka-server-0.0.1-node eureka-server-0.0.1-node.zip</code></p><p>其实shell脚本中包含有解压命令,但是我在打包时放在了zip中,所以只能通过手动解压了,当然可以调整;此时进入加压目录如此:</p><blockquote><p>原文图片已缺失</p></blockquote><p>注:这里第一次执行./shenniu_publish.sh脚本时候,提示了错误信息;是由于我是在windows上编辑的这个脚本,其空格等和linux上不一样,所以运行会有问题,要解决可以使用vim命令在linux把该文件转成linux格式,如下命令:</p><p><code>vim shenniu_publish.sh``set ff=unix``:wq</code></p><p>执行完后,再来运行脚本./shenniu_publish.sh,此时有如下提示:</p><blockquote><p>原文图片已缺失</p></blockquote><p>此刻我们文件是解压状态,因此只需要start命令启动程序即可:</p><blockquote><p>原文图片已缺失</p></blockquote><p>到这里shenniu_publish.sh脚本使用就完成了,只要脚本没有提示错误,基本都能启动jar服务;其他restart和stop命令也如此执行就行:</p><blockquote><p>原文图片已缺失</p></blockquote><p>可以去研究下shell代码,希望该脚本能给你带来效率和好的学习思路,下面是测试用例git地址,脚本在eureka-server项目中:https://github.com/shenniubuxing3/springcloud-Finchley.SR2</p><p>&lt;END&gt;</p><p><strong>推荐阅读:</strong></p><p><a href="http://mp.weixin.qq.com/s?__biz=MzUyNDkzNzczNQ==&amp;mid=2247491041&amp;idx=2&amp;sn=e761065ebf40fa84aae2ebb113fd90e1&amp;chksm=fa24e289cd536b9f8bb72acc1e336b768fe18dbed21caa2c03202fd0393c9dfa2604cc7042b4&amp;scene=21#wechat_redirect" target="_blank" rel="noopener noreferrer">贼好用的Java工具类库,GitHub星标10k+,你在用吗?</a></p><p><a href="http://mp.weixin.qq.com/s?__biz=MzUyNDkzNzczNQ==&amp;mid=2247491026&amp;idx=1&amp;sn=589d781087f286cf65a3e53b42d19658&amp;chksm=fa24e2bacd536baca8f3eff6184fd99f19c3c2f2190b89ba7a5cfd5f62f702885000078c0837&amp;scene=21#wechat_redirect" target="_blank" rel="noopener noreferrer">让你纵横 GitHub 的五大神器</a></p><p><strong>5T技术资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,单片机,树莓派,等等。在公众号内回复「2048」,即可免费获取!!</strong></p><blockquote><p>原文图片已缺失</p></blockquote><p>微信扫描二维码,关注我的公众号</p><p>写留言</p><p>朕已阅 &gt; 原文图片已缺失</p>',32))])}const h=n(o,[["render",r]]),d=JSON.parse('{"path":"/1254.html","title":"Spring Boot 项目打包 + Shell 脚本部署实践,太有用了!","lang":"zh-CN","frontmatter":{"title":"Spring Boot 项目打包 + Shell 脚本部署实践,太有用了!","createTime":"2020-06-13 18:46:06","permalink":"/1254.html","wordpressId":1254,"originalUrl":"http://www.cxyroad.com/1254.html","updateTime":"2020-06-13 18:57:36","author":"良月柒","description":"原文图片已缺失 程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 8.4 分钟。 作者:神牛003 来源:cnblogs.com/wangrudong003/p/10502043.html 本篇和大家分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell…","categories":["Spring Boot"],"tags":["Shell","Spring Boot"],"head":[["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"BlogPosting\\",\\"headline\\":\\"Spring Boot 项目打包 + Shell 脚本部署实践,太有用了!\\",\\"image\\":[\\"https://www.cxyroad.com/brand/cxyroad-og.png\\"],\\"datePublished\\":\\"2020-06-13T18:46:06+08:00\\",\\"dateModified\\":\\"2020-06-13T18:57:36+08:00\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"良月柒\\",\\"url\\":\\"https://www.cxyroad.com/\\"}],\\"description\\":\\"原文图片已缺失 程序员的成长之路 互联网/程序员/技术/资料共享 关æ
1³¨ 阅读本文大概需要 8.4 分钟。 作者:神牛003 来源:cnblogs.com/wangrudong003/p/10502043.html 本篇和大家分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell…\\",\\"url\\":\\"https://www.cxyroad.com/1254.html\\",\\"mainEntityOfPage\\":{\\"@type\\":\\"WebPage\\",\\"@id\\":\\"https://www.cxyroad.com/1254.html\\"},\\"inLanguage\\":\\"zh-CN\\",\\"articleSection\\":\\"Spring Boot\\",\\"keywords\\":\\"Spring Boot, Shell\\",\\"publisher\\":{\\"@type\\":\\"Organization\\",\\"name\\":\\"程序员的成长之路\\",\\"url\\":\\"https://www.cxyroad.com/\\",\\"logo\\":{\\"@type\\":\\"ImageObject\\",\\"url\\":\\"https://www.cxyroad.com/brand/cxyroad-icon.png\\"}}}"],["meta",{"property":"og:url","content":"https://www.cxyroad.com/1254.html"}],["meta",{"property":"og:site_name","content":"程序员成长之路"}],["meta",{"property":"og:title","content":"Spring Boot 项目打包 + Shell 脚本部署实践,太有用了!"}],["meta",{"property":"og:description","content":"原文图片已缺失 程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 8.4 分钟。 作者:神牛003 来源:cnblogs.com/wangrudong003/p/10502043.html 本篇和大家分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell…"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"https://www.cxyroad.com/brand/cxyroad-og.png"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2026-09-04T02:52:09.000Z"}],["meta",{"property":"article:author","content":"良月柒"}],["meta",{"property":"article:tag","content":"Spring Boot"}],["meta",{"property":"article:tag","content":"Shell"}],["meta",{"property":"article:modified_time","content":"2020-06-13T18:57:36+08:00"}],["meta",{"property":"og:image:alt","content":"Spring Boot 项目打包 + Shell 脚本部署实践,太有用了!"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Spring Boot 项目打包 + Shell 脚本部署实践,太有用了!"}],["meta",{"name":"twitter:description","content":"原文图片已缺失 程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 8.4 分钟。 作者:神牛003 来源:cnblogs.com/wangrudong003/p/10502043.html 本篇和大家分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell…"}],["meta",{"name":"twitter:image","content":"https://www.cxyroad.com/brand/cxyroad-og.png"}],["meta",{"property":"article:published_time","content":"2020-06-13T18:46:06+08:00"}],["link",{"rel":"canonical","href":"https://www.cxyroad.com/1254.html"}],["meta",{"name":"robots","content":"index,follow,max-image-preview:large,max-snippet:-1,max-video-preview:-1"}]]},"readingTime":{"minutes":7.44,"words":2233},"git":{"createdTime":1788490329000,"updatedTime":1788490329000},"filePathRelative":"blog/1254.md","headers":[]}');export{h as comp,d as data};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.