0

RHEL7 サーバーを Sudo 用の Privilege Manager に参加させるコマンドがありますが、rc.local スクリプトから実行すると機能しません。以下のコマンドは、特定のアセットではなく、より一般的な名前を使用しています。

エコー "パスワード" | /opt/quest/sbin/pmjoin_plugin -b -a -v -q -d masterport=12345 -d FailOverTimeOut=10 -d selecthostrandom=YES somehostname.com someotherhostname.com >> /var/log/Build.log

手動で、または他の bash スクリプトからコマンドを実行すると、コマンドは完全に機能しますが、rc.local 内から実行すると、パスワードの入力を求めるプロンプトが表示されたときに、パスワードがコマンドにパイプされていないかのようになります。

「プリマスをやめる」などの提案を読みましたが、役に立ちませんでした。

rc.local スクリプト内でこの方法でコマンドにパスワードを「エコー」して、パスワードの入力を求める対話型スクリプトを続行できるようにした経験がある人はいますか?

最終的に、これはインスタンスが最初に起動されたときに実行したいものです。そのため、シェル スクリプトを起動時に一度実行し、rc.local を使用せずにシェル スクリプト自体を削除する別の方法がある場合は、そのルートも調べることができます (crontab など?)。

4

1 に答える 1

0

最終的に、自分の状況に合ったソリューションを実装しました。単に rc.local で実行させるほどクリーンではありませんが、仕事は完了します。

rc.local スクリプトからコマンドを取り出し、独自の .sh スクリプトに入れました。私たちの AMI ビルド プロセスはそれを /tmp/nameofscript.sh に保存し、AMI プロセスが /etc/systemd/system/nameofservicefile.service に保存する systemd サービス ファイルも作成しました。そのサービス ファイルは ExecStart=/tmp/nameofscript.sh で実行されるため、再起動時に実行されます。私たちの rc.local は、フェーズ 1 とフェーズ 2 のような方法で実行され、最後にフェーズ 1 が再起動されるため、フェーズ 1 の部分に行を追加して、再起動の直前に「systemctl enable nameofservicefile.service」でサービスを有効にしました。フェーズ 1 の最後のステップ。

このルートに進むと、「phase1」の最後の再起動がsystemdサービスからスクリプトをトリガーしたため、「phase2」ステップ中にPM Sudo joinコマンドが実行されるようになりました。

再起動のたびに実行されないようにするために、私の /tmp/nameofscript.sh スクリプトには rm -f /etc/systemd/system/nameofservicefile.server と rm -- "$0" でそれ自体を削除する手順があります。

おそらくこれを行うには厄介な方法ですが、仕事は完了します。

于 2016-06-07T16:07:07.540 に答える