私はwebfactionでDjangoフレームワークを使用しており、5つの異なるcronタスクがあります。 1つは他のものよりはるかに長く持続し、時には停止することもあります(30〜120秒以上)。
1分ごとに実行するようにクローンジョブを設定しても完了しないと、/home/aemdy/webapps/hvan/myproject/myfile.py
別のプロセスが開始され、メモリ使用量が増え、サイトが遅くなり、Apacheのクラッシュやメモリリークが発生します。
に設定したくありませんが、*/3 * * * *
次のようなものが欲しいです。
if this process in process list:
pass
else:
run process
これは可能ですか?
答え1
これを行う従来の方法は、/var/run
起動時にスクリプトを調べてファイルが存在することを確認し、存在しない場合は独自のPIDを含むファイルを生成することです。完了すると、スクリプトはファイルを削除します。ファイルが存在すると、スクリプトは直接終了します。これにより、スクリプトが頻繁に呼び出されてもまだ実行されていない基本コードのみが実行されます。
このアプローチの問題は、異常終了によってファイルがシステムに残っていることです。したがって、指定されたPIDが存在するか、そのPIDが正しいスクリプト用であるかを確認するチェックによって強化されることがよくあります。
この方法を使用するには、単にエントリを変更するのではなくスクリプトを変更する必要がありますが、crontab
このような問題を解決するための歴史的なメカニズムです。