次のサービス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ユーザーとグループを追加すると、サービスが機能せず、次のメッセージが表示されます。添付の画像を参照してください
Systemdを使用:
問題を表示するには、サービスの開始後にjournalctl -xe
を使用します。
Bashスクリプトは必要ありません。これをサービスファイルに追加します。
ExecStart=/usr/share/amos/run_amos.sh
ExecStop
は必要ありません。systemdはすべての子プロセスを停止します。 journalctl -u amos.service
を使用して出力を表示できます。
シンプルではなくフォークしたいと思います。 Simpleは、プロセスが終了しないことを前提としているため、終了するとプロセスは終了したと呼ばれます。
おそらく、amos_service.shスクリプトを削除して、その機能をamos.serviceに配置する必要があります。