Linux + systemctl
創建 myService 路徑
創建 systemd 服務文件
服務配置內容
目前使用 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
- active (running)
- 服務正在執行(daemon 常駐中),通常代表 long-running 服務。 e.g. sshd, nginx, my-service
- inactive (dead)
- 服務已經停掉,現在沒有在跑。(這是最單純的「沒開」)
- failed
- 服務嘗試啟動失敗,或執行中掛掉。
- 這時候你會看到 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