0

bash バージョン bash 3.0 を使用して(CentOS 5 上で) ftam サーバーft820.rcを起動していますが、スクリプト、つまり私が実行しているスクリプトからの起動に問題があります。

ssh -nq root@$ip /etc/init.d/ft820.rc start

で定義されたマシンで実行すると、スクリプトはこの行の後に続行しません。$ip

/etc/init.d/ft820.rc start

サービスが開始された直後にプロンプ​​トが返されます。

これはで開始するためのコードですft820.rc

  SPOOLPATH=/usr/spool/vertel
  BINPATH=/usr/bin/osi/ft820
  CONFIGFILE=${SPOOLPATH}/ffs.cfg

  # Set DBUSERID to any value at all. Just need to make sure it is non-null for
  # lockclr to work properly.
  DBUSERID=
  export DBUSERID

  # if startup requested then ...
  if [ "$1" = "start" ]
  then
          mask=`umask`
          umask 0000

          # startup the lock manager
          ${BINPATH}/lockmgr -u 16

          # update attribute database
          ${BINPATH}/fua ${CONFIGFILE} > /dev/null

          # clear concurrency locks
          ${BINPATH}/finit -cy ${CONFIGFILE} >/dev/null

          # startup filestore
          ${BINPATH}/ffs ${CONFIGFILE}
          if [ $? = 0 ]
          then
                  echo Vertel FT-820 Filestore running.
          else
                  echo Error detected while starting Vertel FT-820 Filestore.
          fi

          umask $mask
4

1 に答える 1

1

ここに再投稿します(@Patrykのリクエストに応じて)質問のコメントに入力したもの:

「コマンドラインで ssh を実行するときも同じですか?つまり、以前に宛先 root@$ip:~/ に挿入した private_local_key と対応する public_key のペアを使用して、パスワードを入力せずに接続できますか? .ssh/authorized_keys ファイル ? – Olivier Dulac 20 時間前」

「あなたは、コマンドラインで (スクリプトではなく) root@ を ssh できると言っています....そして、pwd を要求せずに動作しますか? (つまり、スクリプトから実行できますか?) – Olivier Dulac 20時間前 "

"「-n」なしで、さらには -nq なしで ssh を試してみてください: ssh root@$ip /etc/init.d/ft820.rc start :) およびリモート (2:) イベントを非常に詳細な方法で表示し、どこで問題が発生したかを正確に把握するのに役立ちます) – Olivier Dulac 19 時間前 "

"また: スクリプトの "ssh..." 行の前に、次のように別の行を作成します: ssh root@ip "set ; pwd ; ID; これは、ssh 部分が機能していることを確認するのに役立つ場合があります。「set」部分には、実行中のシェルも表示されます (例: BASH= が含まれている場合は、bash を実行しています)。 . それ以外の場合、SHELL=... は、どのシェルが呼び出されるかについての良いヒント (時には正しくない) を与えるはずです) – Olivier Dulac 19 時間前 "

" 「-n」なしで試してください (= 実行してから終了するのではなく、バックグラウンドで実行して待機します)。うまくいきません。ssh に -t -t -t (3 回) を追加してみてください。強制的に tty を割り当てます。ただし、最初に「-n」を削除してください。 – Olivier Dulac 18 時間前」

どうやらうまくいったのは、-tオプションをsshコマンドに追加することでした。(状況に応じて、「-t -t -t」を追加して、tty の割り当てをさらに強制することができます)

呼び出されたコマンドが対話型セッション内で実行されることが期待されていたため、標準出力に「tty」が必要だったためだと思います

可能性 (ただの推測ですが) : 呼び出された rc スクリプトは情報を出力しますが、バッファリングされた環境 (つまり、端末経由で起動されていない場合) では、呼び出し元のスクリプトは、バッファをいっぱいにして何かを出力し始めるのに十分な行を確認できませんでした。 out (バッファリングされた環境で「grep something | somethings else」を実行し、バッファが何かを表示するのに十分な大きさになる前に ctrl+c を実行したときのように: grep によって行が見つからなかったと考えてしまいます。行はすでにバッファにある)。バッファリングについては言いたいことがたくさんありますが、私はそれについてすべて読み始めたところです。ssh に tty を割り当てるように強制すると、呼び出されたコマンドがライブ ターミナル セッションに出力していると見なされ、バッファリングがオフになり、結果が表示された可能性があります。おそらく最初のケースでは、それも機能しましたが、

于 2013-01-09T10:43:59.370 に答える