Linuxサービスを開始しようとしていますが、サービスを開始しようとすると、次の問題が発生します。この問題を解決する方法について助けてください。
ユーザー Test_user は、sudoers ファイルで ALL=(ALL) ALL に設定されます。
Nov 17 11:20:24 systemd[1]: Starting wso2am-4.2.0.service...
Nov 17 11:20:24 wso2am-4.1.0[171210]: Starting the WSO2 Server ...
Nov 17 11:20:24 su[171211]: pam_unix(su:auth): auth could not identify
password for [Test_user] Nov 17 11:20:26 su[171211]: FAILED SU (to
Test_user) root on none Nov 17 11:20:27 wso2am-4.1.0[171210]:
Password: Password: su: Authentication failure Nov 17 11:20:27
systemd[1]: wso2am-4.2.0.service: Control process exited, code=exited
status=1 Nov 17 11:20:27 systemd[1]: wso2am-4.2.0.service: Failed
with result 'exit-code'.
スクリプトには以下が含まれます。
#! /bin/sh
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.18.0.10-2.el8_7.x86_64"
startcmd='/var/wso2am-4.1.0/bin/api-manager.sh start > /dev/null &'
restartcmd='/var/wso2am-4.1.0/bin/api-manager.sh restart > /dev/null &'
stopcmd='/var/wso2am-4.1.0/bin/api-manager.sh stop > /dev/null &'
case "$1" in
start)
echo "Starting the WSO2 Server ..."
su -c "${startcmd}" Test_user
;;
restart)
echo "Re-starting the WSO2 Server ..."
su -c "${restartcmd}" Test_user
;;
stop)
echo "Stopping the WSO2 Server ..."
su -c "${stopcmd}" Test_user
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
ベストアンサー1
私はあなたが次のようなものを持っていると思います:
[Unit]
Description="WS02 Server"
[Service]
User=Test_user
ExecStart=sudo /usr/local/bin/wso2am-4.1.0
これにはいくつかの問題があります。
sudo
相互作用のためです。その目的は、あなたがスクリプトではなく人間であることを確認することです。- を設定しましたが、
User=
を使用してsudo
変更し、一部を元にroot
戻します。User=
次のことができます。
- シンプルだがエレガントではありません:
:NOPASSWD
デザインが/etc/sudoers
ずれているのでお勧めできません。sudo
Test_user ALL=(ALL) NOPASSWD: ALL
- 設定しないでください
User=
。上記の仮定ではを使用していますが、を使用してTest_user
すぐにルートに戻りますsudo
。Test_user
プロセスは実行されなくなりました。この場合は意味がありませんTest_user
。次のことをお勧めします。
[Service]
ExecStart=/usr/local/bin/wso2am-4.1.0
- 私は上記の仮定が間違っている可能性が高いと思い、あなたは特定のものを強化しようとしています。たぶん、スクリプトを次のように呼び出して
Test_user
から、そのスクリプト内で小さなコマンドを昇格させることもできます。この場合、それを取り出してプレフィックスをExecStartPre=
使用して+
高い権限を付与します。
| Service | Script |
|------------------------------|----------------------------|
| [Service] | #!/bin/bash |
| User=Test_user | sudo wso2am-4.1.0 update |
| ExecStart=/path/to/script | wso2am-4.1.0 run |
becomes
[Service]
User=Test_user
ExecStartPre=+/usr/bin/wso2am4.1.0 update
ExecStart=/usr/bin/wso2am4.1.0 run