SSHを介してリモートサーバーでいくつかのコマンドを実行するbashスクリプトを作成したいと思います。その後、リモートサーバーを再起動してSSHを介して再接続し、追加のコマンドを実行する必要があります。
私はこのコードを使用しています:
ssh $theip 'sudo reboot'
echo "starting sleep---1"
sleep 30
echo " finished sleeping1"
while ! ping -c 1 $theip &>/dev/null; do echo "waiting..."; done
echo "starting sleep---2"
sleep 45
echo " finished sleeping2"
echo "finished rebooting"
ssh $theip 'commands....'
問題は、サーバーがsshを実行する前にpingを返し、スクリプトが失敗することです。一部のサーバーには45秒以上の省電力時間が必要です。別の方法がありますか?たとえば、whileループでpingの代わりにsshを使用してみてください。
ありがとう、
ベストアンサー1
"sticky ssh"を取得するには、次のコマンドを試してください。
while true; do command ssh "$@"; [ $? -eq 0 ] && break || sleep 0.5; done
ソース: http://backreference.org/2013/04/26/ssh-auto-reconnect/