Linux

如何使用 systemd 啟動 jar 文件

  • December 13, 2018

我想在系統啟動時使用systemd. 我試圖通過添加上面的腳本來做到這一點。但是服務沒有開始。

我的啟動服務

[Unit]
Description=Startup

[Service]
ExecStart=/usr/local/sbin/my-startup.sh

[Install]
WantedBy=multi-user.target

my-startup.sh

cd /var/www/test.com
nohup java -jar *.jar>test.out 2>test.err &

但是伺服器啟動時應用程序沒有啟動。

● my-startup.service - Startup
  Loaded: loaded (/etc/systemd/system/my-startup.service; enabled; vendor preset: disabled)
  Active: inactive (dead) since Wed 2018-12-12 16:22:52 +0530; 27s ago
 Process: 650 ExecStart=/usr/local/sbin/my-startup.sh (code=exited, status=0/SUCCESS)
Main PID: 650 (code=exited, status=0/SUCCESS)

Dec 12 16:22:52 localhost.localdomain systemd[1]: Started Startup.
Dec 12 16:22:52 localhost.localdomain systemd[1]: Starting Startup...

使用 systemd 指令代替 shell 會產生更一致的環境。這包括通過提供已知的完整路徑而不依賴於 $PATH 或工作目錄。

既不&需要作業控制,也不SIGHUP 需要管理。systemd 服務單元已經在後台執行。

假設程序沒有分叉,換句話說 java exec 繼續執行,那就是Type=simple

[Unit]
Description=something

[Service]
ExecStart=/usr/bin/java -jar /var/www/test.com/something.jar
StandardOutput=file:/var/log/something.out.txt
StandardError=file:/var/log/something.err.txt
Type=simple
WorkingDirectory=/var/www/test.com

[Install]
WantedBy=multi-user.target

引用自:https://serverfault.com/questions/943998