root以外のユーザーとしてsystemdサービスを実行してください!

root以外のユーザーとしてsystemdサービスを実行してください!

amos(amosグループのメンバー)として実行する必要がある次のサービスamos.serviceを作成しました。

[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"

初めてサービスを実行したとき、ディレクトリは変更されませんでした。つまり、ルートディレクトリに属し、amos.serviceには「グループ以外のユーザー」パラメータがなく、すべてがうまく実行されました!

ディレクトリ権限を amos:amos に変更して amos.service ユーザーとグループを追加すると、サービスが機能せず、次のメッセージが表示されます。添付画像をご覧ください。

サービスの実行試行後にエラーが発生しました

答え1

システムを使用してください:

問題を表示するには、journalctl -xeサービスを開始してから使用してください。

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

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

いいえExecStop、systemdはすべての子プロセスを停止します。を使用して出力を表示できますjournalctl -u amos.service

答え2

私はあなたが単純ではなくフォークをしたいと思います。 Simple はプロセスが終了していないと仮定するため、終了するとプロセス終了を呼び出します。

amos_service.sh スクリプトを削除し、その機能を amos.service に入れることができます。

答え3

まず、次のコマンドを使用して変更する構成を見つけます。

systemctl list-unit-files

次に、次のコマンドを使用して特定の構成を変更します。

sudo systemctl edit --full tomcat9.service

これにより、環境変数に設定されているデフォルトのテキストエディタでファイルが開きますEDITOR

次に、特定のユーザーとグループのユーザーサービスセクションを追加します。

答え4

amosアクティベーション - リンガーオプションを使用してユーザーにサービスを開始する権限を付与できますか?

loginctl enable-linger amos

(より男のサイン、これは必須のようです)

関連情報