web-dev-qa-db-ja.com

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ユーザーとグループを追加すると、サービスが機能せず、次のメッセージが表示されます。添付の​​画像を参照してください

Error after trying to run service

22
itprguy

Systemdを使用:

問題を表示するには、サービスの開始後にjournalctl -xeを使用します。

Bashスクリプトは必要ありません。これをサービスファイルに追加します。

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

ExecStopは必要ありません。systemdはすべての子プロセスを停止します。 journalctl -u amos.serviceを使用して出力を表示できます。

12
ctx

シンプルではなくフォークしたいと思います。 Simpleは、プロセスが終了しないことを前提としているため、終了するとプロセスは終了したと呼ばれます。

おそらく、amos_service.shスクリプトを削除して、その機能をamos.serviceに配置する必要があります。

6
pileofrogs