シェルスクリプトでネットワーク接続されるのを待つ

2018年2月18日

この記事は最初の投稿日から20年経過しています。内容が古い可能性があります。

 fetchmail でメールを取る時にシェルスクリプトからネットワーク接続(ダイアルアップや無線LAN)を行う必要があります。

 シェルスクリプトからのネットワーク接続は、netctl で行うことができますが、接続したのかどうかを待つ必要があります。

 私は、次のようなシェルスクリプトで待っています。

#!/bin/sh
PATH=/home/QtPalmtop/bin:/root/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/home/zaurus/bin
echo -n connecting
netctl -c
COUNT=0
while [ -z "`route -n | grep "^0.0.0.0"`" ];
do
COUNT=`expr $COUNT + 1`
echo -n .
if [ $COUNT -eq 10 ]
then
netctl -d
echo QPE/Network 'stop()' > /var/spool/inputhelper/qcop
echo "can't connect."
exit 1
fi
sleep 2
done
echo connected.

20 秒まってもつながらなければ、エラーになります。

ネットワーク接続ですが、今は netctl ではなくて、InputHelperqcopメッセージ送信機能を使って次のようにしています。

#!/bin/sh
PATH=/home/QtPalmtop/bin:/root/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/home/zaurus/bin
echo -n connecting
echo QPE/Network 'connectRequest()' > /var/spool/inputhelper/qcop
COUNT=0
while [ -z "`route -n | grep "^0.0.0.0"`" ];
do
COUNT=`expr $COUNT + 1`
echo -n .
if [ $COUNT -eq 10 ]
then
echo QPE/Network 'stop()' > /var/spool/inputhelper/qcop
echo "can't connect."
exit 1
fi
sleep 2
done
echo connected.

このほうが早いように感じます。

Zaurus

Posted by toshyon