Systemd
以 root 以外的使用者身份執行 systemd 服務!
我創建了以下服務 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/amos
為amos: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。