我正在开发一个需要执行cron的应用程序每分钟和秒。我的意思是,我需要每01:01分(或61秒)运行一个软件。
我已经阅读了一些关于 cron的的内容,我也使用了一些不错的在线生成器来获得很多有用的cron,但我不知道如何生成这个。检查我读到的内容:
答案 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次运行。
设计:第二天会发生什么?使用上面的脚本重新启动或继续计数?