我如何才能让cron立即执行工作以进行测试/调试?无需更改时间表!


133

我有一个计划要每天运行的cron作业,除了更改计划之外,是否还有其他方法可以立即对命令进行测试以查看其是否按预期运行?


我不明白你的问题?为什么不简单地运行命令?
favadi

20
我知道命令在外壳程序(我的外壳程序)中输入时有效,但是我想知道它在cron运行时是否有效,它可能会受到ENV或外壳程序特定内容(~扩展)或所有权和权限内容或...的影响
阿里

2
那么,为什么不创建使用相同命令每分钟运行一次的新cron作业呢?
favadi

13
这正是我最终要做的事情,但是我想知道是否有一种方法可以告诉cron您是否希望对7号作业进行测试!肯定其他人以前有这个问题/要求/希望!
阿里

4
通过Google到达现场的时间很晚,但是关于favadi的回复有什么不对劲。很明显,他想从cron进行测试,而无需专门编辑crontab来进行测试。比他们告诉您想要的东西时,他们还没有尝试理解用例的地方要小。
HörmannHH

Answers:


32

据我所知,由于cron具有特殊用途,因此无法直接执行此操作-在特定时间运行计划命令。因此,最好的办法是手动创建一个crontab条目或编写一个脚本来删除并重置环境。


57

您可以使用以下命令强制crontab运行:

run-parts /etc/cron.daily

9
...假设OP的cron工作(要求3年)位于cron.daily,而不是单个crontab。
杰夫·谢勒

18
但是,这不能完全模拟cron用户的环境,因此很可能仍然会出现错误,因为一旦将脚本作为实际的cron作业运行,您的PATH和其他envvar可能与您所使用的用户不同run-parts /etc/cron.daily。我现在正在解决此错误,因为我的脚本可以正常运行,run-parts但在cron用户下实际运行时会失败。
ArtHare

42

您可以按照“手动并立即运行cron作业”中所述模拟cron用户环境。这将允许您在以cron用户身份运行作业时测试其工作情况。


链接摘录:


步骤1:我将此行临时放在用户的crontab中:

* * * * *   /usr/bin/env > /home/username/tmp/cron-env

然后在文件写入后将其取出。

第2步:为自己制作了一个Run-as-cron bash脚本,其中包含:

#!/bin/bash
/usr/bin/env -i $(cat /home/username/tmp/cron-env) "$@"

因此,作为有问题的用户,我能够

run-as-cron /the/problematic/script --with arguments --and parameters

有用的把戏。当然,如果您在命令中输入了百分号,那将无济于事。
basic6
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.