`cronnext` 将每分钟 cronjob 的 `nextstring` 报告为*当前*分钟的开始,即*过去*。普通的?

`cronnext` 将每分钟 cronjob 的 `nextstring` 报告为*当前*分钟的开始,即*过去*。普通的?

所以我看到了这个奇怪的事情(或者至少对我来说很奇怪,因为我的经验很少)。

cronnext告诉我nextstring每分钟的 cronjob 是开始当前的分钟,
即在过去的

例如,如果我cronnext在处运行02:11:27
它会显示:(而不是
nextstring: Tue Jul 25 02:11:00 2023

如我天真地期望的那样):
nextstring: Tue Jul 25 02:12:00 2023
)

这是正常现象,还是……?

因为我在任何手册页中都找不到任何有关它的信息,
而且我无法用我能想到的术语搜索任何内容......

anacron也添加了标签,
因为我安装了它,
虽然我从未直接使用过它,
所以我不知道它是否相关。

(
$ sudo cronnext -c
#=>

  - user: "username"  
    crontab: /var/spool/cron/tabs/username  
    system: 0  
    entries:  
      - user: username  
        cmd: "/home/username/my_script.sh"  
        flags: 0x0F  
        flagnames: MIN_STAR|HR_STAR|DOM_STAR|DOW_STAR  
        delay: 0  
        next: 1690276260  
        nextstring: Tue Jul 25 02:11:00 2023  
next: 1690276260  


当我遇到这个问题时,我已经找到并修复了我最初试图修复的错误,
所以结果只是在这个特定问题上转移了注意力,
但我决定我仍然想问一下,因为它看起来仍然诡异的大部头书。

答案1

Debian 上不存在该工具,所以我下载了最新版本,克罗尼-1.6.1来自 Github 上的源存储库。

联机帮助页中写道描述,

cron确定执行下一个作业的时间。如果没有参数,它会打印考虑所有 crontab 的时间,以纪元以来的秒数为单位,四舍五入到分钟

(我的强调。)代码似乎总是向下舍入,这会生成错误的答案,例如您发现的答案。

我是这样构建的:

./configure --prefix=
make

并运行它:

src/cronnext

解决方法似乎是将src/cronnext.c调用的第 250 行的循环启动条件更改nextmatch()为 usestart+60而不是start。然而,我对此没有足够的信心来提交补丁,并且我怀疑start通过在第 344 行定义的位置添加 60(秒)而不是在使用它时进行修复会更好。

由于您使用该程序,因此最好提交有关该程序的错误报告问题跟踪器

相关内容