问题描述
我必须在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-sms
和serv-2-sms
的主机,当我将此cron条目保存在/etc/cron.d/目录中时,它将同时在两个主机中触发。
因此,为了避免它在同一时间多次运行,我在脚本内使用了以下逻辑。
逻辑是,当脚本开始运行时(从serv-1-sms
或serv-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 (将#修改为@)