跳转至

Linux + systemctl

創建 myService 路徑

cd ~
mkdir /opt/service

創建 systemd 服務文件

nano /etc/systemd/system/my-service.service

服務配置內容

目前使用 root 用戶

[Unit]
Description=MY Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /opt/service/myService.jar
WorkingDirectory=/opt/service
Restart=always
RestartSec=5
User=root
Group=root

# 環境變數
Environment=JAVA_HOME=/usr/lib/jvm/default-java

# 日誌
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

啟動和管理服務

# 啟動服務
sudo systemctl start my-service

# 停止服務  
sudo systemctl stop my-service

# 重啟服務
sudo systemctl daemon-reload
sudo systemctl restart my-service

# 查看狀態
sudo systemctl status my-service

# 查看日誌
sudo journalctl -u my-service --since today
sudo journalctl -u my-service -n 50

# 停用服務
# enabled/disabled 就代表開機自動啟用狀態。
sudo systemctl disable my-service

status

  1. active (running)
    1. 服務正在執行(daemon 常駐中),通常代表 long-running 服務。 e.g. sshd, nginx, my-service
  2. inactive (dead)
    1. 服務已經停掉,現在沒有在跑。(這是最單純的「沒開」)
  3. failed
    1. 服務嘗試啟動失敗,或執行中掛掉。
    2. 這時候你會看到 Result: exit-code 或 signal。

通常要用 journalctl -u xxx.service 看詳細錯誤。

防火牆

外部連8081 swagger

# 檢查你的程式到底監聽哪裡
ss -tulnp | grep 8081
tcp   LISTEN 0      100                     *:8081             *:*    users:(("java",pid=230706,fd=15))

# 如果服務真的有在 0.0.0.0:8081 監聽,但你從外部還是打不進來,那就是 防火牆在擋。
sudo firewall-cmd --list-ports
3306/tcp 8080/tcp 8443/tcp

# 沒看到 8081/tcp 就要加
sudo firewall-cmd --permanent --add-port=8081/tcp
success

sudo firewall-cmd --reload
success

sudo firewall-cmd --list-ports
3306/tcp 8080/tcp 8081/tcp 8443/tcp