Unix crontab报告在指定的开始和结束日期时间内运行的内容

Unix crontab报告在指定的开始和结束日期时间内运行的内容,unix,crontab,Unix,Crontab,是否有任何工具或报告可以在给定的crontab文件中输出在指定时间范围内运行的作业 我们的crontab文件已经变得非常大,当我们在服务器上安排停机时,系统管理员很难找出哪些作业需要重新运行。我们正在努力找出需要运行哪些作业 我正计划写我自己的剧本,但不知道是否已经有什么东西了你可以做的一件事是: 获取Perl模块 将其修改为仅可选择睡眠(创建“快进”模式,并在快进时睡眠($sleep)更改为不做任何事情。这还需要更改$now=time;调用以执行$now++ 将其修改为能够指示仿真的开始和结

是否有任何工具或报告可以在给定的crontab文件中输出在指定时间范围内运行的作业

我们的crontab文件已经变得非常大,当我们在服务器上安排停机时,系统管理员很难找出哪些作业需要重新运行。我们正在努力找出需要运行哪些作业


我正计划写我自己的剧本,但不知道是否已经有什么东西了

你可以做的一件事是:

  • 获取Perl模块

  • 将其修改为仅可选择睡眠(创建“快进”模式,并在快进时睡眠($sleep)更改为不做任何事情。这还需要更改
    $now=time;
    调用以执行
    $now++

  • 将其修改为能够指示仿真的开始和结束时间

  • 创建一个Perl one liner,它接受
    crontab-l
    的输出,并将其转换为类似的contab,但它用一个Perl子例程
    sub{print”Execution:cmd1 arg1 arg2\n}

  • 以快进模式运行调度程序,如POD中所示

    它将读取修改后的crontab,并模拟执行


这里有一种类似于DVK的方法,但使用的是Perl模块

这是一个非常“警告用户”的帖子-一个起点。给定这个crontab文件
a\u crontab.txt:

59 21 * * 1-5    ls >> $HOME/work/stack_overflow/cron_ls.txt
    # A comment
18 09 * * 1-5    echo "wibble"
下面的脚本cron.pl按如下方式运行,给出:

$ perl cron.pl a_crontab.txt "2009/11/09 00:00:00" "2009/11/12 00:00:00"
2009/11/09 09:18:00 "echo "wibble""
2009/11/09 21:59:00 "ls >> $HOME/work/stack_overflow/cron_ls.txt"
2009/11/10 09:18:00 "echo "wibble""
2009/11/10 21:59:00 "ls >> $HOME/work/stack_overflow/cron_ls.txt"
2009/11/11 09:18:00 "echo "wibble""
2009/11/11 21:59:00 "ls >> $HOME/work/stack_overflow/cron_ls.txt"
2009/11/12 09:18:00 "echo "wibble""
2009/11/12 21:59:00 "ls >> $HOME/work/stack_overflow/cron_ls.txt"
原型(!)脚本:

使用严格;
使用警告;
使用Schedule::Cron::Events;
我的$crontab_file=shift | | die“!必须提供crontab文件名”;
我的$start_time=shift | | die“!必须提供开始时间YYYY/MM/DD HH:MM:SS”;
我的$stop_time=shift | | die“!必须提供停止时间YYYY/MM/DD HH:MM:SS”;

打开我的$fh,“对于Schedule::Cron的“模拟模式”(以及任何其他在内部使用sleep、time、alarm而不修改Schedule::Cron本身的模块),有一个很好且干净的解决方案。您可以使用time::Mock进行投掷,例如

perl -MTime::Mock=throttle,600 schedule.pl
你可以将你的“时间机器”的速度提高600倍(因此,与其睡10分钟,它只睡一秒钟)。有关更多详细信息,请参阅time::Mock的主页

对于直接与Schedule::Cron一起使用crontab文件,您应该能够直接从自述文件中获取示例:

 use Schedule::Cron;
 my $cron = new Schedule::Cron(sub { system(shift) },
                               file => "/var/spool/crontab.perl");
 $cron->run();
这里的诀窍是使用默认的dispatcher方法,该方法使用存储的参数调用system()。请告诉我,这是否对您有效,或者是否需要修复。当然,您也可以使用print来代替system。

注意:Roland(Schedule::Cron的作者/维护者)张贴了一个更优雅的方式做快进使用他的模块。
 use Schedule::Cron;
 my $cron = new Schedule::Cron(sub { system(shift) },
                               file => "/var/spool/crontab.perl");
 $cron->run();