Cron作业在同一时间在可用VM中运行多次

问题描述

我必须在cron中运行一个脚本,在那里我要将cron条目保留在/etc/cron.d目录中。

这是我的cron条目的样子(在/etc/cron.d/cron_for_abd_list.cron中):

30 * * * * /home/usr/vinod/ABD_List/Cron_script_V1.pl  > /home/usr/vinod/ABD_List/LOG/Log_Cron_`date +\%y\%m\%d_\%H`.txt 2>&1

因此,我的cron脚本将在第30分钟每小时运行一次,并将日志存储在LOG目录中,即/home/usr/vinod/ABD_List/LOG/

实际上,系统的配置方式使该cron一次可在2台服务器中运行。因为这就是环境的配置方式。

我有一个名为serv-1-smsserv-2-sms的主机,当我将此cron条目保存在/etc/cron.d/目录中时,它将同时在两个主机中触发。

因此,为了避免它在同一时间多次运行,我在脚本内使用了以下逻辑。

逻辑是,当脚本开始运行时(从serv-1-smsserv-2-sms开始运行),它将首先在同一目录(tempfile.txt)中检查伪文件ABD_List。 。如果已经存在,则进程将终止,否则脚本将继续运行,最后,脚本将删除开始时创建的tempfile.txt

use strict;
use warnings;

my $filename = "/home/usr/vinod/ABD_List/tempfile.txt";
if (-e $filename) {
    print "File already exists.. Exiting: $$\n";
    exit 0;
}

system("touch $filename");

...
#executing the rest of the things in the scripts
...

unlink $filename;

print "END\n";

这就是我避免同时运行相同脚本的冲突。

我这个逻辑有点奇怪。如果有任何替代逻辑,请建议我,或者我们可以在crontab本身中控制此冲突,这将更有帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)