私は他の世界からUNIXに飛び込み、
while true
do
/someperlscript.pl
done
Perlスクリプト自体には、ターゲットの場所でファイルが変更されたときに実行されるフォルダ/ファイルウォッチャーがあります。
これはwhile true
良い考えですか?そうでなければ、好ましい強力なアプローチは何ですか?
ティア
編集:これはかなりの関心を引き起こすように見えるので、全体的なシナリオは次のとおりです。 Perlスクリプト自体はファイルウォッチャーを使用してディレクトリを監視します。新しいファイルを受信したら(rsync経由で到着)、新しいファイルを選択して処理します。これで、渡されたファイルが破損する可能性があります(ラズベリーパイから尋ねないでください)、時にはプロセスがそれを処理できないことがあります。私たちはまだすべてを知っていないので、その理由を正確にはわかりません。
ただし、何らかの理由でプロセスが失敗した場合は、次のファイルがエラーを引き起こす可能性がある古いファイルとはまったく関係がないため、プロセスを開始して実行して次のファイルを処理したいと思います。
通常、私は一種のキャッチオールを使用し、コード全体を囲み、競合が発生しないようにします。しかし、Perlについてはよくわかりません。
私が理解したように、Supervisordのようなものを使用するのは良い方法です。
ベストアンサー1
これは、Perlスクリプトがどれだけ早く返されるかによって異なります。すばやく返される場合は、CPUの負荷を防ぐために実行間に少し一時停止を挿入することができます。たとえば、次のようになります。
while true
do
/someperlscript.pl
sleep 1
done
これはまた、スクリプトが見つからない場合や直ちにクラッシュした場合にCPUを大量に使用することを防ぎます。
これらの問題を回避するために、ループはPerlスクリプト自体で最もよく実装されています。
編集する:
競合が発生した場合にPerlスクリプトを再起動する唯一の目的でループを作成するときのより良いアプローチは、それを監視対象サービスとして実装することですが、正確な方法はオペレーティングシステムによって異なります。例:Solaris smf、Linux systemd、またはcronベースの再起動プログラム。