我有一个用户的 crontab 的问题。
Crontab 拒绝运行任何作业,除非它计划每分钟运行一次 (* * * * *)。
一旦您将任务编辑为在每小时的第 15 分钟运行,它就无法运行。
这每分钟运行正常:
* * * * * touch /tmp/test01
Run Code Online (Sandbox Code Playgroud)
这无法在每小时的第 15 分钟运行。它只是不会运行。
15 * * * * touch /tmp/test02
Run Code Online (Sandbox Code Playgroud)
操作系统是 RedHat 4。
我总是编辑 croncrontab -e并EDITOR设置为 vi。我在15 * * * *(分钟可以改变)之间来回改变* * * * *,结果是一样的。它只喜欢五个星号。
大编辑:
我按照@shane-h的问题进行了测试*/2 * * * *(每隔一分钟),结果奏效了!然后我发现了一些启示:
我用这个字符串做了一个测试 37 * * * * touch /tmp/prueba_777777
令我惊讶的是,这件事实际上运行了,但看看文件的日期:
-rw-r--r-- 1 orashut dba 0 Aug 8 08:07 prueba_777777
最近服务器设置为新的委内瑞拉时区,现在是-04:00,但以前是-04:30。
当您运行 date 命令时,它会显示正确的日期。创建文件时,FS 中的文件日期是正确的。但不知何故,cron 作业提前 30 分钟运行。这就是为什么当我在未来安排了几分钟的工作时它不起作用,因为对于 cron 守护程序来说,时间已经过去了。如果我等了将近一个小时,它会在 30 分钟之内运行。这就是为什么接触的文件比计划的 37 分钟早 30 分钟。
所以现在的问题是:
很明显,cron 守护程序正在使用旧时区,而服务器的其余部分正在使用新时区。
如何修复 cron 守护进程对新时区的理解?
小智 1
我无法给你一个具体的答案,但我将如何解决这个问题:
尝试更多的组合来找到另一种有效的表达方式。怎么样:(*/2 * * * *每隔一分钟),或者* */2 * * *(每隔一分钟,每隔一小时)。确定任何相对表达式都有效,而固定表达式则无效,这将是很有趣的。
保存时,您是否会看到确认消息“已安装新的 crontab?” (或类似的东西)
您可以查看crontab -l您的留言吗?
这是用户 crontab 还是系统 crontab?
您在系统日志中看到消息吗?如果您添加第二个* * * * *cron,您应该每分钟都会看到一次,如果您添加每隔一分钟的变体,您能在 syslog 中看到更频繁的作业吗?
你能配置一个工作at命令吗?
当您弄清楚这一点后,我建议您使用我构建的服务https://cronitor.io来关注您的重要工作。开发人员可以免费监控一项工作,并且有商业用途的付费计划。多年来,我已经成为一名 cron 调试专家,并且知道如果我需要一个解决方案来监控我的重要工作,其他人可能也会这样做。
来自评论:
Cron 使用相同的系统时区来启动作业,所以我会尝试重置它:
再次设置您的时区,只是为了彻底:在 Red Hat 使用上redhat-config-date
重新启动 cron 守护进程。我认为你的操作系统版本:/etc/init.d/crond restart