基本的に実行されるルーターと「実行したい」をuhttpd
使用するプロセスがあります。どちらのプロセスも同じポートを共有するため、コマンドを含むスクリプトを再起動時に実行されるジョブに設定して終了し、自動的に起動したいとlighttpd
思います。uhttpd
lighttpd
cron
スクリプトに個別に入力したいコマンドを実行すると機能します。これをスクリプトに入れると、ポート番号が使用中であるというエラーメッセージが表示されます。コマンドは次のとおりです。
killall uhttpd
/etc/init.d/lighttpd start
これまでの私の簡単なスクリプトは次のとおりです。
#!/bin/sh
killall uhttpd
sleep 5 #To give the device time to release the port
/etc/init.d/lighttpd start
ベストアンサー1
私は5秒待たず、これがうまくいくことを願っています。長すぎたり短すぎたりすることがあります。nc -z
次のようにして、ポートが(まだ)使用されているかどうかをテストできます(ポート80に対して「戦い」をしているとします)。
#!/bin/bash
for i in $(seq 5); do
if ! nc -z localhost 80; then
break
fi
echo $i
sleep 1
done
if nc -z localhost 80; then
killall -9 uhttpd
sleep 1
fi
if ! nc -z localhost 80; then
/etc/init.d/lighttpd start
else
echo 'port not free'
fi
5回待ってもプロセスが終了しない場合は、より強力にプロセスを終了し、ポートが空の場合にのみlighttpdを起動してください。
何かがuhttpdを再起動しているかどうかを調べる必要があります(たとえば、最初に起動したプロセスなど)。たぶんあなたが使っているものが再起動するのに十分な時間を持っているかもしれません(例えば、sleep 5
スクリプトの実行前後のプロセス番号を見てください)。uhttpd