2 回答

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
應該是服務腳本。
它們不僅僅是服務的可執行文件。這些腳本應該是能夠理解諸如start
, stop
,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。為您的生產服務器使用生命周期結束的操作系統是不明智的。
請注意,網絡上有很多文檔和很多文章都介紹了配置服務的新舊方法。(谷歌是你的朋友。)

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 并在生產環境中手動配置服務。
添加回答
舉報