サービスを開始できません。認証時にパスワードが認識されません。

サービスを開始できません。認証時にパスワードが認識されません。

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

これにはいくつかの問題があります。

  1. sudo相互作用のためです。その目的は、あなたがスクリプトではなく人間であることを確認することです。
  2. を設定しましたが、User=を使用してsudo変更し、一部を元にroot戻します。User=

次のことができます。

  1. シンプルだがエレガントではありません::NOPASSWDデザインが/etc/sudoersずれているのでお勧めできません。sudo
Test_user  ALL=(ALL) NOPASSWD: ALL
  1. 設定しないでくださいUser=。上記の仮定ではを使用していますが、を使用してTest_userすぐにルートに戻りますsudoTest_userプロセスは実行されなくなりました。この場合は意味がありませんTest_user。次のことをお勧めします。
[Service]
ExecStart=/usr/local/bin/wso2am-4.1.0
  1. 私は上記の仮定が間違っている可能性が高いと思い、あなたは特定のものを強化しようとしています。たぶん、スクリプトを次のように呼び出して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

答え2

私の他の答えは、あなたが持つことができる一般的なケースsudoまたはsuあなたのスクリプトに適用されます。スクリプトが実際に話す内容の詳細を追加したので、ここにはよりカスタマイズされた答えがあります。

追加したスクリプトはいくつかの操作しか実行しません。

  1. セット$JAVA_HOME
  2. start、、stopコマンドを特定のユーザーrestartに渡すapt-manager.sh
  3. 何をしているかを文書化してください。

これは以前のinitシステムで実行するように設計されているようですがsystemd。 ()。そのスクリプトを忘れて、同じことを正しく実行するサービスを作成してください。exportechosucase>/dev/null&

[Service]
Type=forking
User=Test_user
ExecStart=/var/wso2am-4.1.0/bin/api-manager.sh start
ExecStop=/var/wso2am-4.1.0/bin/api-manager.sh stop
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.18.0.10-2.el8_7.x86_64

唯一の違いは、thenがsystemctl restart実行されることです。いいえ、だからあなたのサービスに追加していません。単純ではなく設定を再ロードする場合。ExecStop=ExecStart=ExecRestart=apt-manager.sh restartstop/startExecReload=/var/wso2am-4.1.0/bin/api-manager.sh restart

の内容に応じて、api-manager.shスクリプトを削除し、独自に起動するプロセスを簡単に開始することもできます。削除してType=simpleサービスとして実行することもできます。

関連情報