我有一个程序被符号链接到多个目录,例如
/main/foo.pl
/run1/foo.pl -> /main/foo.pl
/run2/foo.pl -> /main/foo.pl
/run3/foo.pl -> /main/foo.pl
/run4 /foo.pl -> /main/foo.pl
它们作为 cron 作业运行,因此我在 crontab 中有以下条目:
*/2 * * * * /run1/foo.pl
*/2 * * * * /run2/foo.pl
*/2 * * * * /run3/foo.pl
*/2 * * * * /run4/foo .pl
foo.pl的片段如下:
use Fcntl qw(:flock);
use autodie qw(:all);
open my $self, '>', "$FindBin::Bin/lockme";
flock( $self, LOCK_EX|LOCK_NB )
or die "Cannot acquire lock, already running!";
{
my $long_proc = Process->new();
$long_proc->run();
}
你明白了,每个 cron 进程只能运行一次,因为有一个锁信号量检查。但run1、run2、run3和run4可以同时运行。
现在我需要的是我想将进程数限制为最多四个。如果有人添加另一个 cron 进程,例如:
新符号链接:
/run5/foo.pl -> /main/foo.pl
/run6/foo.pl -> /main/foo.pl
额外的 crontab:
*/5 * * * * /run5/foo.pl
* * * * * /run6/foo.pl
每当 run1、run2、run3 和 run4 都仍在运行时,run5 和 run6 都需要排队。因此,在任何给定时间将只有 4 个进程运行。
我怎样才能做到这一点?是否有任何处理它的 CPAN 模块?
谢谢!