デフォルトで実行されているルーターがあり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