1

基本的に mplayer を使用してオーディオ ストリームを開始する bash スクリプトがあります。

#!/bin/bash
# startmusic.sh
/usr/bin/mplayer http://www.audiostream.com

私が確認したいのは、mplayer が何らかの理由でクラッシュまたは終了した場合、自動的に再起動されることです。したがって、bash スクリプトでもある cron ジョブを毎分実行しています。

#!/bin/bash
# interval.sh
if [ -z "$(pgrep mplayer)" ]; then
 #restart music
 (
  exec </dev/null
  exec >/dev/null
  exec 2>/dev/null
  umask 0
  cd /
 bash /home/user/startmusic.sh
 ) &
else
 echo "music already playing, no need to restart startmusic.sh"         
fi

このスクリプトがあまり役に立たない奇妙な点の 1 つは、mplayer が 2 つのインスタンスを開始しているように見えることです。プレーヤーが停止した場合 (たとえば、接続が失われた場合など)、1 つの mplayer インスタンスだけが終了し、残りの 1 つが残ります。私のプログラミング スキルは非常に初歩的なものなので、(実装が簡単な) 解決策があれば大歓迎です。よろしくお願いします/J

4

1 に答える 1

5

無限ループを使用するのはどうですか:

#!/bin/bash
# startmusic.sh
while :; do
    /usr/bin/mplayer http://www.audiostream.com
done

mplayerクラッシュした場合は、ランチャー スクリプトによって無限に再起動されます。

もちろん、これは、ランチャー スクリプトmplayerを完全に停止したい場合は、最初とその後でランチャー スクリプトを強制終了する必要があることを意味します。

編集:

このような単純なスクリプトは、次のいずれかが発生した場合を除き、終了することはありません。

  • それはあなたによって終了されます。誤ってそれをしないように合理的な予防措置を講じていると思います-もしそうなら、おそらくあなたはそれを知って自分で修正するでしょう. それほど重要な場合は別のユーザーとしてスクリプトを実行して、ほとんどのランダムな間違いから保護する必要があります。

  • シェル スクリプトがクラッシュします。Bashは、他のソフトウェアと同じようにいくつかのバグがありましたが、ループのような単純なものが新しいバグを引き起こすとは思えません。

  • システム全体で何かが発生します。メモリ不足の状態、ハードウェアの問題、さらにはより一般的な電力損失. その場合:

    1. スクリプトを監視する必要があるシステムも影響を受ける可能性があります。

    2. システムをオンラインに戻すなど、より大きな魚を揚げる必要があります。

    3. このような問題を抱えたボックスで自動化された何かが本当に必要ですか?

プロセスの監視に cron を使用すると、次の 2 つの問題があります。

  • 特に、同じプログラム ( mplayerなど) の複数のインスタンスが同時に実行されている場合は特にそうです。

  • 何らかの理由でプロセスをシャットダウンする場合は、目的のプロセスの前に cron エントリを無効にする必要があります。

の場合にランチャー スクリプトを再起動することに真剣に取り組んでいる場合は<insert-favourite-catastrophe>、次のような適切なプロセス監視デーモンを使用する必要があります。

http://ps-watcher.sourceforge.net/

http://mmonit.com/monit/

そして、やり過ぎなどはないと思うなら:

http://www.nagios.com/

http://www.opennms.org/

于 2011-01-28T08:46:30.880 に答える