<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Dockerfile:如何用CMD同時(shí)啟動(dòng)兩個(gè)進(jìn)程

      場(chǎng)景

      在一個(gè)Dockerfile中,如何編寫CMD指令,使得可以同時(shí)啟動(dòng)兩個(gè)進(jìn)程?

      方案

      這兩個(gè)進(jìn)程假設(shè)分別為Springboot Jar工程、sh腳本:

      • app.jar
      • script.sh

      需要明確一點(diǎn):

        CMD指令本身只能直接執(zhí)行一個(gè)命令

      所以我們只能通過(guò)間接方式來(lái)做到啟動(dòng)多個(gè)進(jìn)程:

        使用啟動(dòng)腳本start.sh,在其中定義兩個(gè)進(jìn)程的啟動(dòng)邏輯,最后使用CMD啟動(dòng)該啟動(dòng)腳本即可。

      start.sh

      #!/bin/bash
      
      #1、啟動(dòng)script.sh,且用&使其在后臺(tái)運(yùn)行
      /usr/local/script.sh &
      
      #2、啟動(dòng)SpringBoot Jar工程,作為前臺(tái)進(jìn)程
      java -jar /usr/local/app.jar

      Dockerfile

      FROM openjdk:17-jdk-slim
      
      #COPY
      COPY start.sh /usr/local/
      COPY script.sh /usr/local/
      COPY app.jar /usr/local/
      
      #權(quán)限
      RUN chmod +x /usr/local/start.sh \
          && chmod +x /usr/local/script.sh
      
      WORKDIR /usr/local
      
      CMD ["./start.sh"]

      補(bǔ)充

      1、為什么start.sh中,script.sh啟動(dòng)指令中一定要在末尾加一個(gè)&

      &代表這是一個(gè)后臺(tái)進(jìn)程,腳本不會(huì)等待它執(zhí)行完畢,而是直接執(zhí)行下一行命令。這本質(zhì)上是一種并發(fā)

      2、為什么jar工程不用加&,從而使兩個(gè)工程、腳本都為后臺(tái)運(yùn)行狀態(tài)?

      Docker容器會(huì)在前臺(tái)主進(jìn)程退出時(shí)停止,因此Docker容器必須要有一個(gè)前臺(tái)進(jìn)程,若所有程序都在后臺(tái)運(yùn)行,容器會(huì)立即退出。

      通常會(huì)將核心服務(wù)(如SpringBoot)作為前臺(tái)進(jìn)程,確保服務(wù)退出時(shí)容器能夠正常感知并停止。

      3、可否兩個(gè)工程都為前臺(tái)工程?

      shell腳本中,無(wú)法同時(shí)讓兩個(gè)程序均以前臺(tái)的方式運(yùn)行,如果寫成:

      /path/to/script.sh
      java -jar /path/to/app.jar

      那么運(yùn)行結(jié)果就是“先執(zhí)行sh,再執(zhí)行jar”這樣一種串行運(yùn)行方式。

      因此如果要同時(shí)運(yùn)行多個(gè)進(jìn)程,只能用“1前臺(tái)+多后臺(tái)”這種形式,所有的后臺(tái)進(jìn)程運(yùn)行指令的末尾,加上&。

      4、為什么jar工程不用chmod +x

      核心原因在于JAR文件本身不是可執(zhí)行程序,而是通過(guò)java -jar命令調(diào)用JVM來(lái)解析運(yùn)行的字節(jié)碼文件

      • 執(zhí)行JAR文件的命令是java -jar app.jar,本質(zhì)是讓JVM讀取并解析JAR文件中的內(nèi)容,而不是直接執(zhí)行JAR文件本身
      • 這里的app.jar只是一個(gè)被JVM讀取的數(shù)據(jù)源,就像用cat命令讀取文本文件那樣,并不需要可執(zhí)行屬性。

      什么文件才需要+x權(quán)限?

      chmod +x用于賦予可被操作系統(tǒng)執(zhí)行的文件的執(zhí)行權(quán)限,這類文件通常有兩種:

      • 編譯型程序:如C/C++編譯后的二進(jìn)制文件(可直接被CPU執(zhí)行);
      • 腳本文件:.sh文件(首行有#!/bin/bash,告訴系統(tǒng)用什么解釋器執(zhí)行)

      app.jar不屬于以上任何一種,因此不用+x權(quán)限,即使加了也沒(méi)法通過(guò)./app.jar執(zhí)行(會(huì)報(bào)錯(cuò)無(wú)法執(zhí)行二進(jìn)制文件),必須通過(guò)java -jar調(diào)用。

      如果給jar文件加了+x會(huì)怎么樣?

      可以用chmod +x app.jar,但是沒(méi)什么意義:既不會(huì)影響它的運(yùn)行,也不會(huì)帶來(lái)任何好處,反而會(huì)被誤解為JAR文件是可以直接執(zhí)行的。

       

      posted @ 2025-09-11 17:01  ShineLe  閱讀(42)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 激情自拍校园春色中文| 中文字幕av一区二区| 国产精品成人网址在线观看| 国产91成人亚洲综合在线| 欧美色丁香| 欧美做受视频播放| 狠狠色噜噜狠狠狠狠777米奇| 曰韩无码av一区二区免费 | 伊在人间香蕉最新视频| 日韩有码中文字幕第一页| 狠狠躁日日躁夜夜躁欧美老妇 | 久久久久无码精品国产h动漫| 2019香蕉在线观看直播视频| 伊人春色激情综合激情网| 久久精品国产亚洲综合av| 亚洲av一本二本三本| 色欲久久综合亚洲精品蜜桃| 视频一区视频二区制服丝袜| 日本毛茸茸的丰满熟妇| 色欲av亚洲一区无码少妇| 亚洲国产超清无码专区| 亚洲日韩av无码一区二区三区人| 久久天天躁夜夜躁狠狠85| 亚洲熟女精品一区二区| 久久综合色之久久综合色| 五月综合激情婷婷六月| 国产亚洲精品一区二区无| 少妇人妻互换不带套| 亚洲国产精品国自拍av| 人体内射精一区二区三区| 老色鬼永久精品网站| 熟女一区二区中文字幕| 斗六市| 国产午夜免费高清久久影院| 亚欧美日韩香蕉在线播放视频| 99福利一区二区视频| 国产一级黄色片在线观看| 国精偷拍一区二区三区| 久久精品国产亚洲av麻豆长发| 国产微拍一区二区三区四区| 国产伦精品一区二区三区妓女|