uhttpdを終了してlighttpdを起動する簡単なスクリプトをどのように作成できますか?

uhttpdを終了してlighttpdを起動する簡単なスクリプトをどのように作成できますか?

基本的に実行されるルーターと「実行したい」をuhttpd使用するプロセスがあります。どちらのプロセスも同じポートを共有するため、コマンドを含むスクリプトを再起動時に実行されるジョブに設定して終了し、自動的に起動したいとlighttpd思います。uhttpdlighttpdcron

スクリプトに個別に入力したいコマンドを実行すると機能します。これをスクリプトに入れると、ポート番号が使用中であるというエラーメッセージが表示されます。コマンドは次のとおりです。

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

おすすめ記事