解決Linux systemd服務(wù)啟動失敗Main process exited,code=exited, status=203/EXEC問題
問題描述
命令:
java -Xms1024m -Xmx1024m -jar /usr/local/java/bin/mashang/app.jar --server.port=8532 ----spring.profiles.active=test
是可以直接啟動的,但是注冊service后,使用systemd無法啟動
解決思路及方法
vim /etc/systemd/system/mashang.service
查看service文件如下
[Unit] Description=Mashang Service After=network.target nginx.service Requires=nginx.service [Service] Type=simple User=root Group=root ExecStart=java -Xms1024m -Xmx1024m -jar /usr/local/java/bin/mashang/app.jar --server.port=8532 ----spring.profiles.active=test Restart=on-failure [Install] WantedBy=multi-user.target
啟動日志:
Jul 20 21:13:28 localhost systemd[1]: mashang.service: Main process exited, code=exited, status=203/EXEC Jul 20 21:13:28 localhost systemd[1]: mashang.service: Failed with result 'exit-code'. Jul 20 21:13:28 localhost systemd[1]: mashang.service: Scheduled restart job, restart counter is at 5. Jul 20 21:13:28 localhost systemd[1]: Stopped Mashang Service. Jul 20 21:13:28 localhost systemd[1]: mashang.service: Start request repeated too quickly. Jul 20 21:13:28 localhost systemd[1]: mashang.service: Failed with result 'exit-code'. Jul 20 21:13:28 localhost systemd[1]: Failed to start Mashang Service.

排除方向一:nohup
在Linux系統(tǒng)中,使用nohup命令主要是為了在終端關(guān)閉或用戶登出后,使命令或腳本在后臺繼續(xù)運行,并且其輸出通常會被重定向到一個名為nohup.out的文件中(除非用戶指定了其他輸出文件)。但是,如果你嘗試在開機啟動腳本(如/etc/init.d/中的腳本,或使用systemd的.service文件)中使用nohup來啟動某個服務(wù)或腳本,可能會遇到一些問題。
以下是一些原因和解決方案:
- 不適合開機啟動:nohup主要用于在交互式shell中運行命令,使其在后臺運行并忽略掛起(HUP)信號。在開機啟動腳本中,你通常不需要nohup,因為這些腳本本身就是在系統(tǒng)啟動時以非交互式方式運行的。
- 日志重定向:如果你使用nohup并將輸出重定向到某個文件,那么在系統(tǒng)啟動過程中可能會出現(xiàn)權(quán)限問題或路徑問題。確保你的腳本有足夠的權(quán)限來寫入指定的日志文件,并且路徑是正確的。
- systemd替代方案:如果你使用的是現(xiàn)代Linux發(fā)行版,建議使用systemd來管理服務(wù),而不是傳統(tǒng)的init腳本。你可以創(chuàng)建一個.service文件,并指定你的服務(wù)應(yīng)該如何啟動、停止和重啟。在.service文件中,你可以使用ExecStart指令來指定要運行的命令或腳本,而無需使用nohup。
- 環(huán)境變量問題:nohup命令可能會改變某些環(huán)境變量,這可能會影響你的腳本的運行。在開機啟動腳本中,環(huán)境變量可能與你在交互式shell中看到的不同。確保你的腳本不依賴于任何特定的環(huán)境變量,或者在你的腳本中顯式設(shè)置這些變量。
- 調(diào)試和日志記錄:如果你的腳本在開機時無法啟動,請確保啟用詳細(xì)的日志記錄,并檢查系統(tǒng)日志(如/var/log/syslog、/var/log/messages或journalctl)以獲取更多信息。你還可以嘗試在腳本中添加set -x來啟用跟蹤,以便查看腳本在運行時執(zhí)行的每個命令。
- 權(quán)限問題:確保你的開機啟動腳本和要運行的命令或腳本具有正確的權(quán)限。你可能需要使用chmod和chown命令來設(shè)置適當(dāng)?shù)臋?quán)限和所有權(quán)。
- 總之,雖然nohup在某些情況下很有用,但在Linux的開機啟動腳本中通常不是必需的。如果你遇到問題,請考慮使用其他方法(如systemd)來管理服務(wù),并檢查日志以獲取更多信息。
排除方向二:使用絕對路徑而不是相對路徑
java改絕對路徑后正常
vim /etc/systemd/system/mashang.service
查看service文件如下
```bash vim /etc/systemd/system/mashang.service
查看service文件如下
[Unit] Description=Mashang Service After=network.target nginx.service Requires=nginx.service [Service] Type=simple User=root Group=root ExecStart=java -Xms1024m -Xmx1024m -jar /usr/local/java/bin/mashang/app.jar --server.port=8532 ----spring.profiles.active=test Restart=on-failure [Install] WantedBy=multi-user.target

systemctl status mashang

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
CentOS(Linux)下的apache服務(wù)器配置與管理方法分享
CentOS(Linux)下的apache服務(wù)器配置與管理方法分享,需要的朋友可以參考下。2011-04-04
ubuntu16.04下安裝openssh-server報依賴錯誤的完美解決方法(非常不錯)
這篇文章主要介紹了ubuntu16.04下安裝openssh-server報依賴錯誤的完美解決方法(非常不錯)的相關(guān)資料,需要的朋友可以參考下2016-11-11
windows10 更新Ubuntu20.04 LTS的方法步驟
這篇文章主要介紹了windows10 更新Ubuntu20.04 LTS的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06

