2 回答

TA貢獻1911條經(jīng)驗 獲得超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:常規(guī)可執(zhí)行 JAR 文件不是操作系統(tǒng)可識別的可執(zhí)行格式1。
在常規(guī) JAR 文件上設(shè)置執(zhí)行位無濟于事。操作系統(tǒng)內(nèi)核不知道如何運行它。要運行常規(guī) JAR,您必須執(zhí)行命令java -jar /path/to/the.jar
。如有必要,您可以創(chuàng)建一個簡單的包裝器腳本來執(zhí)行此操作。
1 - 有一種方法可以生成一個特殊的“完全可執(zhí)行”的 SpringBoot JAR 文件,該文件前面有一個 shell 腳本;請參閱“安裝 Spring Boot 應(yīng)用程序”。這是解決此問題的一種方法,盡管文檔指出這些特殊的 JAR 文件會導(dǎo)致某些工具出現(xiàn)問題。
問題 #2:中的文件/etc/init.d
應(yīng)該是服務(wù)腳本。
它們不僅僅是服務(wù)的可執(zhí)行文件。這些腳本應(yīng)該是能夠理解諸如start
, stop
,restart
等動詞的 shell 腳本reload
。并且(AFAIK)它們必須編碼為sh
兼容的 shell 腳本。這是一篇描述服務(wù)腳本結(jié)構(gòu)的文章:
(但請先閱讀問題 #4!?。?/p>
問題 #3:運行服務(wù)root
可能存在安全風(fēng)險。
最好創(chuàng)建一個(非特權(quán))服務(wù)帳戶來運行該服務(wù)。如果服務(wù)暴露在網(wǎng)絡(luò)中,這一點尤其重要。(如果壞人可以通過網(wǎng)絡(luò)“破解”該服務(wù)并使其做出不受歡迎的事情,那么它以 root 身份運行的事實會使整個系統(tǒng)處于危險之中。)
問題 #4: /etc/init.d/
腳本已過時。
如果您使用的是最新的 Ubuntu 版本(15.04 或更高版本),這些/etc/init.d/
腳本是“傳統(tǒng)”配置方式。該initd
機制的當(dāng)前迭代是systemd
. 它使用systemd
單元文件文件而不是服務(wù)腳本。以下文章提供了更多信息:
該systemd
服務(wù)包括遺留服務(wù)腳本,但它們不如單元文件強大、靈活和……簡潔……。
問題 #5: Ubuntu 14.04 LTS 已停產(chǎn)。
您應(yīng)該升級到 16.04 LTS 或最好是 18.04 LTS。為您的生產(chǎn)服務(wù)器使用生命周期結(jié)束的操作系統(tǒng)是不明智的。
請注意,網(wǎng)絡(luò)上有很多文檔和很多文章都介紹了配置服務(wù)的新舊方法。(谷歌是你的朋友。)

TA貢獻1871條經(jīng)驗 獲得超8個贊
經(jīng)過一番搜索后,我發(fā)現(xiàn) spring boot為Ubuntu 和 CentOS提供了開箱即用的服務(wù)實踐。
我犯的主要錯誤是沒有將我的項目打包為可執(zhí)行 jar。
要使 springboot jar 可執(zhí)行,編輯 POM 文件,將<executbale>
標(biāo)簽添加到<configuration>
spring-boot-maven-plugin 的標(biāo)簽中,如下所示:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
...
</plugins>
</build>
...
</project>
打包上傳新的可執(zhí)行jar到服務(wù)器
chownjar 給 nologin 用戶,該服務(wù)將由它的所有者運行。
chmod 500jar 給它可執(zhí)行權(quán)限。
添加到 /etc/init.d 的軟鏈接以將其注冊為服務(wù)。
運行服務(wù),到目前為止一切順利。
但正如@Stephen C 所說,默認選項既不夠安全也不是最新的。我認為最好只打包一個 fat jar 并在生產(chǎn)環(huán)境中手動配置服務(wù)。
添加回答
舉報