![`cronnext` 将每分钟 cronjob 的 `nextstring` 报告为*当前*分钟的开始,即*过去*。普通的?](https://linux22.com/image/222799/%60cronnext%60%20%E5%B0%86%E6%AF%8F%E5%88%86%E9%92%9F%20cronjob%20%E7%9A%84%20%60nextstring%60%20%E6%8A%A5%E5%91%8A%E4%B8%BA*%E5%BD%93%E5%89%8D*%E5%88%86%E9%92%9F%E7%9A%84%E5%BC%80%E5%A7%8B%EF%BC%8C%E5%8D%B3*%E8%BF%87%E5%8E%BB*%E3%80%82%E6%99%AE%E9%80%9A%E7%9A%84%EF%BC%9F.png)
所以我看到了这个奇怪的事情(或者至少对我来说很奇怪,因为我的经验很少)。
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(秒)而不是在使用它时进行修复会更好。
由于您使用该程序,因此最好提交有关该程序的错误报告问题跟踪器。