LightFile NextLightFile Next

排他制御

プロセスの重複実行を防ぐ仕組み

LightFile Batchは、同一マシン上で複数のプロセスが同時に実行されないよう、自動的に排他制御を行います。

LightFile Batchは非常に重い処理を行い、処理時間も一定ではありません。cronなどで定期実行する際、前回の処理が終わらないうちに次の実行時刻が来てしまうと、プロセスが重複して起動し、システムリソースの競合やパフォーマンスの著しい低下が発生します。

排他制御により、前回のプロセスが実行中の場合は新しいプロセスの起動をスキップし、処理の重複を防ぎます。

排他制御の仕組み

動作:

  • LightFile Batch起動時に、システムディレクトリ内に exclusive.lock ファイルを作成
  • プロセス実行中、ロックファイルは10秒ごとに継続的に更新されます(ハートビート)
  • ロックファイルの更新が停止してから5分が経過すると、そのロックファイルは無効になります
  • すでに別のLightFile Batchプロセスが実行中の場合、新しいプロセスは起動せずエラーで終了
  • 正常終了時または異常終了時に、ロックファイルを自動削除

ロックファイルのパス: ~/.lightfile-next/exclusive.lock

同時起動を試みた場合のエラー

すでにLightFile Batchが実行中のときに、別のプロセスを起動しようとすると、以下のエラーが表示されます:

Error: another instance is already running

この場合、以下のいずれかの対処を行ってください:

  1. 既存のプロセスが完了するまで待つ(推奨)
  2. 排他制御を無効化する (--non-exclusive)

排他制御の無効化

複数のLightFile Batchプロセスを意図的に同時実行したい場合は、--non-exclusiveオプションで排他制御を無効化できます。

lightfile-batch local /path/to/images --non-exclusive
nonExclusive: true

警告: 排他制御を無効化すると、システムリソースの競合により、以下の問題が発生する可能性があります:

  • CPU・メモリ・ディスクI/Oの過負荷
  • 処理速度の著しい低下
  • システム全体のパフォーマンス低下

通常は排他制御を有効にしておくことを強く推奨します。

ロックファイルが残留してしまった場合

プロセスが異常終了(強制終了、クラッシュ、システム再起動など)した場合、ロックファイルが削除されずに残ることがあります。

ただし、通常は5分待てば自動的にロックが解除されます。ハートビートの更新が5分間停止すると、ロックファイルは無効となり、新しいプロセスが起動できるようになります。

症状: プロセスが実行されていないのに、以下のエラーが表示される

Error: another instance is already running

対処方法:

  1. 5分待ってから再度実行する(推奨):

    # 5分後に再実行
    lightfile-batch local /path/to/images
  2. すぐに実行したい場合は、LightFile Batchが本当に実行中でないか確認:

    # プロセスを確認
    ps aux | grep lightfile-batch
  3. 実行中のプロセスがない場合、ロックファイルを手動で削除:

    # システムディレクトリのロックファイルを削除
    rm ~/.lightfile-next/exclusive.lock
  4. 再度LightFile Batchを実行:

    lightfile-batch local /path/to/images

詳細は トラブルシューティング - セットアップの問題 を参照してください。

関連ページ