- 论坛徽章:
- 0
|
有时,我们在做系统crontab时,会发现有的命令需要在一个时间段中随机的一个时间被执行一次。crond服务并没有给我们提供这个功能,但我们可以用perl来生成随机时间。crontab依然是定时完成工作,但它执行命令的时间却是随机的。
解决问题的思路:
写一个会生成随机时间的crontab文件的perl脚本,在每天0点执行这个生成新crontab的perl脚本。
脚本如下:
root># cat rand_cron.pl
#!/bin/perl
#Author: Larry wu
#Usage: This script use to create a crontab randam execute dbbackup.sh at 3:00 ~ 5:00 clock
open (CRONFILE,">/tmp/rand_cron.cron");
$time=`date`;
###create random time of minute and hour to execute dbbackup.sh
$rand_minute=int(rand 60);
$rand_hour=int(rand 6);
$rand_hour=3 if ($rand_hour < 3);
### create crontab and print it
print CRONFILE "###create a crontab randam execute dbbackup.sh at 3:00 ~ 5:00 clock \n";
print CRONFILE "1 0 * * * perl /var/dbbackup/rand_cron.pl \n";
print CRONFILE "###clean db binlog last 3 days ago at 3:00 every day \n";
print CRONFILE "0 3 * * * find /var/lib/mysql/ -type f -mtime +3 -name '*bin*' | grep -v index | xargs rm -f \n";
print CRONFILE "###backup db binlog to /var/db_logbackup/ \n";
print CRONFILE "1 17 * * * bash /var/db_logbackup/db_logbackup.sh >>/var/db_logbackup/db_logbackup.txt 2>>/var/db_logbackup/db_logbackup.txt \n";
print CRONFILE "###backup db use mysqlhotcopy to /var/dbbackup/ \n";
print CRONFILE "$rand_minute $rand_hour * * * bash /var/dbbackup/dbbackup.sh hotcopy >> /var/dbbackup/dbbackup.txt 2>> /var/dbbackup/dbbackup.txt \n";
### load crontab and print log
$exec=`crontab /tmp/rand_cron.cron`;
if ($exec) {
`echo "load crontab error at $time" >> /var/dbbackup/dbbackup.err`;
}else{
`echo "load crontab success at $time" >> /var/dbbackup/dbbackup.txt`;
} |
|