これを行うにはいくつかの方法がありますが、どれが最適かはわかりません。
これが私が考えることができるものです:
- pgrep を使用してプロセスを探します。
- flock を使用してスクリプト自体をロックし、実行するたびにロックされているかどうかを確認します。
- /var/run/program_name.pid に pid ファイルを作成して存在を確認し、必要に応じて pid を比較します。
これを行うには、おそらくもっと多くの方法があります。最善のアプローチは何だと思いますか?
これを行うにはいくつかの方法がありますが、どれが最適かはわかりません。
これが私が考えることができるものです:
これを行うには、おそらくもっと多くの方法があります。最善のアプローチは何だと思いますか?
それを行うには多くの方法があります。PID ファイルは、それを行う従来の方法です。プログラム自体など、ファイルをロックすることもできます。この小さなコードでうまくいきます。
use Fcntl ':flock';
open my $self, '<', $0 or die "Couldn't open self: $!";
flock $self, LOCK_EX | LOCK_NB or die "This script is already running";
PID ファイルに対する利点の 1 つは、プログラムの終了時にファイルが自動的にロック解除されることです。信頼できる方法で実装する方がはるかに簡単です。
古い PID ファイルのトリックを実行します。
HTH
乾杯、
ロブ
リストするオプションはすべて問題ありません。ただし、これに伴う 1 つのことは、ごくまれに、非常に長い時間実行されるプロセス (つまり、何かを待機してスタックする) になる可能性があることに注意することです。他の実行中のインスタンスが実行されている時間を監視し、特定の時間 (1 日など) を超えた場合に自分自身にアラートを送信することを検討することをお勧めします。