私はこのコードを持っています:
for i in $ipb $ipc $ipd; do
ssh -i ~/.ssh/'key' 'name'@${i} /bin/bash << EOF
nohup ${install_dir}/redis-stable/src/redis-server ${install_dir}/${port}/node.conf &
EOF
let "port++"
done
これにより、3つのIPアドレスすべてでRedisサーバーが起動します。ただし、現在は最初のコマンド(ipbから)のみを実行します。注:nohup-edコマンドを手動で入力する場合、Redisサーバーがこのコマンドで起動した場合、ユーザーは別のコマンドを入力する前にEnterキーを押す必要があります。この問題はredisとは関係ありませんが、スクリプトの書き方による問題である可能性が高いので、Redisについての知識は必要ないと思います。 SSHもうまく機能します。
3つのコマンド(各IPごとに1つ)をすべて実行するには、何を変更する必要がありますか?
お時間をいただきありがとうございます。さらに情報が必要な場合は、お気軽にお知らせください。
ベストアンサー1
説明する
コマンド(/bin/bash
)なしで指定したため、リモート側にはttyが割り当てられていません。その後、2つのことが起こります。ssh
-t
nohup
標準ストリームをリダイレクトしないでください(ttyがあれば大丈夫);SSHサーバーはeofを待ちます。ローカルは、接続が失われるまで実行され続けます
ssh
。eofは、パイプの書き込み側プロセスに対して開いているファイル記述子がない場合に発生します。これは通常、stdoutが他にリダイレクトされていないすべてのプロセスが消えた場合にのみ発生します。
標準ストリームをリダイレクトします。あなたは答えでした。SSHサーバーが早期に切断されるようにします。