Expectスクリプトを使用したUpstartスクリプト

Expectスクリプトを使用したUpstartスクリプト

Expectスクリプトとupstartスクリプトを組み合わせる方法についてアドバイスしてください。

私は今3つのスクリプトを作業しています。

スクリプトA)Javaプログラム

   PATH: /opt/~~/manager

スクリプトB) RebornスクリプトAのUpstartスクリプト

   PATH: /etc/init/xx.conf

スクリプトC)ヘルスチェック- プッシュスクリプトAは他のサーバーのプロセスにコマンドを送信し、接続状態を確認します。クローンとして実行します。

   PATH: /opt/x~x/healthcheck.sh

私がしたいことは

1) サーバーが再起動されるか、プロセスが終了するたびに Java プロセスを再起動します。これはスクリプトBを用いて行われる。

2)ヘルスチェックプログラム(スクリプトC)を定期的に実行して、Javaプロセスと他のサーバーのプロセス間の接続を維持します。このプログラムの機能は、Telnetを介してネイバーサーバープロセスにリンクコマンドを送信することです。

上記の「2」で失敗しており、アドバイスを求めたいと思います。

現在私のスクリプトは次のとおりです。

スクリプトB)

description “description”

start on runlevel [2345]

stop on runlevel [!2345]

env USER=executinguser

respawn
respawn limit 2 10

script

      while [ ! "`ifconfig -s | grep eth1`" ]
      do
        sleep 5
      done

      su - ${USER} -c "source /opt/~~/.bash_profile && \
      /opt/~~/manager start | \
      tee -a  /opt/~~.log"
    end script

pre-start script

      RET=`su - ${USER} -c "source /opt/~~/.bash_profile && \
      /opt/~~/manager status > /dev/null" || echo $?`
      if [ "$RET" -eq "0" ] || [ -z "$RET" ] ; then
        su - ${USER} -c "source /opt/~~/.bash_profile && \
        /opt/~~/manager force-stop"
      fi
    end script

pre-stop script

      su - ${USER} -c "source /opt/~~/.bash_profile && \
      /opt/~~/manager r force-stop"
    end script

上記のスクリプトは正しく機能し、プロセスはエラーなしで再生成されます。

次に、このスクリプトに自動プロセスルーティングを追加するために、デフォルトの「スクリプト」セクションの後にこの行を追加して目的のスクリプトを呼び出しました。

/usr/bin/sh -f /etc/init/autolink.sh

実行権限を付与するようにファイルの権限を変更します。 -rwxr-xr-x 1ルートルート207 5月14日11時25分 autolink.sh

/etc/init/autolink.sh

#!/usr/bin/expect -f

puts "First test"

set CMD "link routename IPaddress Port"
set HOST "localhost"

  spawn telnet ${HOST}
  expect “`^]`"
  send \"${CMD}\n\"
  expect "000"

私も次のことを試しました


#!/usr/bin/expect -f

puts "First test"

  spawn telnet IPaddress Port
  expect “`^]`"
  send "link routename IPaddress Port"
  expect "000"

私はスクリプトBで別のパスを使用して予想されるスクリプトを呼び出そうとしましたが、他の拡張子とShabanを使用して予想されるスクリプト名を指定しようとしましたが、それらのどれも機能しません。実際、私が試したオプションのどれも "puts" First test"行を読みません、または期待されるスクリプトの一部として。

Expectスクリプトを単独で実行する場合 -# ./autolink.sh

うまく動作し、「^]」を受信し、最後に「000」を受信できず、リンクコマンドを送信した後に終了します。

私はまた、<1>起動スクリプトの変数にExpectスクリプトを挿入し、その変数をエコーするか、<2> "expect -c"または "/usr/bin/"を使用してスクリプトの予想される部分を入力するのに疲れました。 <

私の質問は - シェルスクリプトから予想されるスクリプトをどのように呼び出すべきですか?適切なshebangとコマンドを使用してExpectをスクリプトするにはどうすればよいですか?

事前に助けてくれてありがとう。

ベストアンサー1

おすすめ記事