Systemd

以 root 以外的使用者身份執行 systemd 服務!

  • March 18, 2021

我創建了以下服務 amos.service,它需要作為 amos(amos 組的成員)執行

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

[Service]
User=amos
Group=amos
Type=simple
WorkingDirectory=/usr/share/amos
ExecStart=/usr/share/amos/amos_service.sh start
ExecStop=/usr/share/amos/amos_service.sh stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

所有權限都已設置/usr/share/amosamos:amos

amos_service.sh 如下:

#!/bin/bash

CUDIR=$(dirname "$0")
cd /usr/share/amos

start() {
 exec /usr/share/amos/run_amos.sh >> /var/log/amos.log 2>&1  
}

stop() {
 exec pkill java 
}

case $1 in
 start|stop) "$1" ;;
esac

cd "$CURDIR"

當我最初執行該服務時沒有對目錄進行任何修改,這意味著屬於 root,並且 amos.service 沒有 User not Group 參數,一切執行良好!

一旦我將目錄權限更改為 amos:amos 並添加 amos.service 使用者和組,服務將無法正常工作,我會得到以下資訊:參見附圖

嘗試執行服務後出錯

使用系統:

journalctl -xe在您啟動服務後顯示問題使用。

您不需要 bash 腳本,將其放入您的服務文件中:

ExecStart=/usr/share/amos/run_amos.sh

不需要ExecStop,systemd 會停止所有子程序。您可以使用 查看輸出journalctl -u amos.service

我認為你想要分叉而不是簡單。Simple 假設你的程序沒有退出,所以當它退出時,它會呼叫程序死亡。

您可能希望刪除 amos_service.sh 腳本並將其功能放入 amos.service。

引用自:https://unix.stackexchange.com/questions/363098