Cron每分钟都跑一次

时间:2015-01-25 08:56:31

标签: unix cron scheduled-tasks task

我正在开发一个需要执行cron的应用程序分钟和秒。我的意思是,我需要每01:01分(或61秒)运行一个软件。

我已经阅读了一些关于 cron的的内容,我也使用了一些不错的在线生成器来获得很多有用的cron,但我不知道如何生成这个。检查我读到的内容:

请有人帮我创建这个cron吗?

3 个答案:

答案 0 :(得分:2)

Cron不能这样做。它只处理1分钟的分辨率。在HH:MM:00之后,您可以使用sleep在指定的秒数内运行命令,但它不能每61秒运行一次命令。

这是一个应该做你想做的Perl脚本:

#!/usr/bin/perl

use strict;
use warnings;

my @command = @ARGV;

while (1) {
    sleep 61 - time % 61;
    system @command;
}

sleep调用将休眠,直到time()的值达到61秒的下一个倍数(自纪元以来测量,1970-01-01 00:00:00 UTC)。

crontab不同,此脚本不会继续在重新启动时运行,除非您执行某些操作以重新启动它。如果您正在使用Vixie cron,则可以使用@reboot cron作业重新启动它。

crontab不同,如果命令运行时间超过61秒,则会静默跳过下一次迭代。 (这可能是一个理想的功能)。

答案 1 :(得分:1)

尝试类似:

*/1 * * * *    sleep 1; mycommand 
^^                ^^
every minute   one second

答案 2 :(得分:1)

正常的cron会因de leap-second而失败: 00:01:01 / 00:02:02 / 00:03:03 / ../00:59:59 / 01:01:00 / ..

Cron很好,所以不要为了一个全新的解决方案而改变它。 在脚本中添加支持

check_program_not_already_running
if [ -f ${SLEEPFILE} ]; then
   sleepsecs=$(cat ${SLEEPFILE})
   (( sleepsecs = sleepsecs + 1 ))
   sleep ${sleepsecs}
else
   sleep 1
   sleepsecs = 2
fi
echo ${sleepsecs} > ${SLEEPFILE}
do_your_thing

check_program_not_already_running:您必须执行某些操作(pidfile / ps / smart cron schedule)以确保在59次运行后仍然只有1个进程正在休眠。

优化:当$ {sleepsecs} = 60时,重置计数器并跳过1次运行。

设计:第二天会发生什么?使用上面的脚本重新启动或继续计数?