root以外のユーザーとしてsystemdサービスを実行しています!


18

次のサービス、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に属し、Users not Groupパラメータを持たないamos.serviceがすべて実行されます。

ディレクトリのアクセス許可をamos:amosに変更し、amos.serviceユーザーとグループを追加すると、サービスが機能せず、次のメッセージが表示されます。添付画像を参照

サービスを実行しようとした後のエラー


/var/log/amos.logに記録されるメッセージに関して、成功事例と失敗事例の違いはありますか?
sourcejedi

また、この設定は/var/log、rootが所有しているという点で奇妙です。/var/log/amos/amosが所有するディレクトリを作成したいと思います。
sourcejedi

前述のように作成し、結果をログに記録します
-itprguy

回答:


11

systemdを使用します。

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

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

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

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


4
ExecStartの後に「=」が必要です。編集が6文字未満になるため、修正できません。
マークストースバーグ

5

単純なものではなく、分岐したいと思います。Simpleは、プロセスが終了しないと想定しているため、終了するとプロセスをdeadと呼びます。

おそらく、amos_service.shスクリプトを削除して、その機能をamos.serviceに入れたいと思うでしょう。


提案どおりに変更を行います...それについて読んでいて、あなたのコメントを見ました。結果を記録します。
itprguy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.