電子書籍の厳選無料作品が豊富!

SimpleHTTPServerを起動しています。4-10ヶ月に1回位の頻度で理由は不明ですがサーバが落ちます。そこで、rc.localに追加しようと思うのですが問題なさそうでしょうか?


---------rc.local-------------
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you dont
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
/etc/wakame-init md
cd /html_file/
python -m SimpleHTTPServer 12345&

# ↑今までのコードに↓を追加する
while true
do
if ps aux | grep "SimpleHTTPServer" | grep -v grep
then
echo "SimpleHTTPServer ok"
else
cd /html_file/
echo `date "+%F %T"` " SimpleHTTPServer reboot" >> SimpleHTTPServer_reboot.log
python -m SimpleHTTPServer 12345&
fi
sleep 60
done

A 回答 (2件)

> 終了させないことで不安定になったりセキュリティ的に良くないのでしょうか?



セキュリティ的にとかっていうより、本来であれば起動完了時に正常終了しているべきスクリプトが走り続けるという所が、あるべき姿じゃない気がして気持ち悪いということです。
くわえて、起動時処理が完了しないわけなので、コンソールログインができないんじゃないですかね。(すいません試してませんが)

別スクリプトにしてプロセスとしては切り離しすのが常道です。
よって、貴方の方針を極力尊重してループで常駐させたるとすると、その処理を別スクリプト(例えば/root/httpserver_check.shとか)にして、rc.localにはそれを起動する処理を追記するの方がスマートに感じます。

/root/httpserver_check.sh

#!/bin/sh

while true
do
if ps aux | grep "SimpleHTTPServer" | grep -v grep
then
logger -t SimpleHTTPServer "ok"
else
cd /html_file/
logger -t SimpleHTTPServer "reboot"
python -m SimpleHTTPServer 12345 &
fi
sleep 60
done


rc.local

/root/httpserver_check.sh &
    • good
    • 0

スクリプトの妥当性はわかりませんが、rc.localがずっと終了しないことに気持ち悪さを感じます…



自分だったらシェルスクリプト化して、cronで定期的にチェック&落ちてたらスタートにします。

ちなみに、/html_file ってドキュメントrootですか?
そこに、SimpleHTTPServer_reboot.log 作っちゃっていいんですか?

logger -t SimpleHTTPServer "reboot" とかでsyslogに吐いちゃう方がlogrotate考慮しなくていいので楽だとおもいますけど。

あたりを考慮して、自分ならこういう雰囲気にしたいところですね。

#!/bin/sh
if test `ps aux | grep "SimpleHTTPServer" | grep -v grep | wc -l` -gt 0
then
logger -t SimpleHTTPServer "ok"
else
cd /html_file/
logger -t SimpleHTTPServer "reboot"
python -m SimpleHTTPServer 12345&
logger -t SimpleHTTPServer "reboot(${?})"
fi
    • good
    • 0
この回答へのお礼

アドバイス頂きありがとうございます!とても参考になります。

rc.localが終了しないことですが、終了させないことで不安定になったりセキュリティ的に良くないのでしょうか?あまりLinuxに触る機会がなく気持ち悪いという感覚がわからなかったりします。また、権限的に強く何でもできるため重宝しているというのもあります。
シェルスクリプト化してcronという方法もあるのですね。思いつきませんでした。
ただ、私だとこのシェルスクリプトも質問のようにループさせるかもしれません。
これを起動させるcronは常に起動しているのでしょうが、こういった起動しっぱなしというのは一般に良くないのでしょうか?

>ちなみに、/html_file ってドキュメントrootですか?
そのとおりです。サーバ内部ではCGIが動いておりファイル生成されてたり更新されています。ただ、特に見られて困るようなものでもないですし、むしろ自分で外部からアクセスができ便利ですので一応自分が使ってるプロバイダのIPのみのアクセス許可にしてそのまま使っています。

お礼日時:2021/12/16 18:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!