亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 ubuntu 14.04.1 上將 SpringBoot jar 作為服務部署后出現語法錯誤

在 ubuntu 14.04.1 上將 SpringBoot jar 作為服務部署后出現語法錯誤

胡子哥哥 2023-03-17 15:26:07
我有一個打包為 jar 文件的 springboot web 應用程序。并且產品服務器是安裝了openjdk-8-jdk的Ubuntu 14.04.1。我可以使用以下方法成功運行應用程序:sudo java -jar /home/myUser/my_web_app.jar然后我通過以下命令將此應用程序作為 SystemV 服務:sudo useradd webUsersudo passwd webUsersudo chown webUser:webUser /home/myUser/my_web_app.jarsudo chmod 500 /home/myUser/my_web_app.jarsudo ln -s /home/myUser/my_web_app.jar /etc/init.d/my_web_app之后,當我運行時:sudo service my_web_app start錯誤引發為:/etc/init.d/my_web_app: 1: /etc/init.d/my_web_app: Syntax error: ")" unexpected.我想知道是什么原因導致此錯誤以及如何解決它。謝謝。順便說一句,同樣的方法適用于我的開發機器(Ubuntu 14.04.6)。
查看完整描述

2 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

問題是這兩行:

sudo chmod 500 /home/myUser/my_web_app.jar
sudo ln -s /home/myUser/my_web_app.jar /etc/init.d/my_web_app

問題 #1:常規可執行 JAR 文件不是操作系統可識別的可執行格式1。

在常規 JAR 文件上設置執行位無濟于事。操作系統內核不知道如何運行它。要運行常規 JAR,您必須執行命令java -jar /path/to/the.jar。如有必要,您可以創建一個簡單的包裝器腳本來執行此操作。

1 - 有一種方法可以生成一個特殊的“完全可執行”的 SpringBoot JAR 文件,該文件前面有一個 shell 腳本;請參閱“安裝 Spring Boot 應用程序”。這是解決此問題的一種方法,盡管文檔指出這些特殊的 JAR 文件會導致某些工具出現問題。

問題 #2:中的文件/etc/init.d應該是服務腳本。

它們不僅僅是服務的可執行文件。這些腳本應該是能夠理解諸如startstop,restart等動詞的 shell 腳本reload。并且(AFAIK)它們必須編碼為sh兼容的 shell 腳本。這是一篇描述服務腳本結構的文章:

(但請先閱讀問題 #4?。。?/p>

問題 #3:運行服務root可能存在安全風險。

最好創建一個(非特權)服務帳戶來運行該服務。如果服務暴露在網絡中,這一點尤其重要。(如果壞人可以通過網絡“破解”該服務并使其做出不受歡迎的事情,那么它以 root 身份運行的事實會使整個系統處于危險之中。)

問題 #4: /etc/init.d/腳本已過時。

如果您使用的是最新的 Ubuntu 版本(15.04 或更高版本),這些/etc/init.d/腳本是“傳統”配置方式。該initd機制的當前迭代是systemd. 它使用systemd 單元文件文件而不是服務腳本。以下文章提供了更多信息:

systemd服務包括遺留服務腳本,但它們不如單元文件強大、靈活和……簡潔……。

問題 #5: Ubuntu 14.04 LTS 已停產。

您應該升級到 16.04 LTS 或最好是 18.04 LTS。為您的生產服務器使用生命周期結束的操作系統是不明智的。


請注意,網絡上有很多文檔和很多文章都介紹了配置服務的新舊方法。(谷歌是你的朋友。)


查看完整回答
反對 回復 2023-03-17
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

經過一番搜索后,我發現 spring boot為Ubuntu 和 CentOS提供了開箱即用的服務實踐。

我犯的主要錯誤是沒有將我的項目打包為可執行 jar。

要使 springboot jar 可執行,編輯 POM 文件,將<executbale>標簽添加到<configuration>spring-boot-maven-plugin 的標簽中,如下所示:

<project>

   ...

   <build>

      <plugins>

         <plugin>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-maven-plugin</artifactId>

            <configuration>

               <executable>true</executable>

            </configuration>

         </plugin>

         ...

      </plugins>

   </build>

   ...

</project>

打包上傳新的可執行jar到服務器


chownjar 給 nologin 用戶,該服務將由它的所有者運行。


chmod 500jar 給它可執行權限。


添加到 /etc/init.d 的軟鏈接以將其注冊為服務。


運行服務,到目前為止一切順利。


但正如@Stephen C 所說,默認選項既不夠安全也不是最新的。我認為最好只打包一個 fat jar 并在生產環境中手動配置服務。


查看完整回答
反對 回復 2023-03-17
  • 2 回答
  • 0 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號