Ubuntuの cron で「@reboot コマンド」と書いて起動時にスクリプトを実行する際、ネットワーク接続を前提としていると失敗することがあります。
cronサービスの後にネットワークサービスが起動するので、@reboot でのコマンド実行時はまだネットワークを使用できません。
さらに、ネットワークサービスが起動しても、DHCPの場合はIPアドレスが取得されるまではインターネットにアクセス出来ません。
そこで、インターネット接続ができるようになるまで待つスクリプトです。
Windowsがインターネットアクセスを判定している仕組み(次のマイクロソフトblog参照)と同様に、http://www.msftconnecttest.com/connecttest.txt をダウンロードして中身が「Microsoft Connect Test」だったらインターネット接続と判定します。インターネット接続と判定されるまでは失敗しても、2分間試行します。
ネットワーク接続状態インジケーター (NCSI) の概要とトラブルシュート | Microsoft Japan Windows Technology Support Blog
スクリプト実行では wget がインストールされている必要があります。curl を使用する場合は、スクリプト中の CONTENT= の行で、wget の方をコメントアウトし、curl の行の方をコメント解除してください。
#!/bin/bash
URL="http://www.msftconnecttest.com/connecttest.txt"
EXPECTED="Microsoft Connect Test"
MAX_TRIES=40
INTERVAL=3
TRY=1
while [ $TRY -le $MAX_TRIES ]; do
#CONTENT=$(curl -s --max-time 5 --connect-timeout 5 $URL)
CONTENT=$(wget -q -T 5 -O - $URL)
if [ "$CONTENT" = "$EXPECTED" ]; then
exit 0
fi
sleep $INTERVAL
TRY=$((TRY + 1))
done
exit 1
コメント