如何测试新的 cron 脚本?

gar*_*les 14 linux testing test cron

我在几个不同的 Linux 发行版(Fedora 11、CentOS 5 和 SuSE 10.2)上运行,并且经常遇到一个问题,即我想作为 cron 作业运行的新脚本在从命令行直接调用时可以正常工作,但由于 PATH 或其他所需环境变量的细微变化而从 cron 调用时失败。

有没有一种方法可以测试运行单个脚本,就像它是从 cron 运行一样,而不必运行整个 crontab 或使用 run-parts 运行整个 cron.daily/.hourly 等目录?我想我可以在接下来的几分钟内临时编辑我的 crontab 以运行脚本,但我宁愿有一个更独立的解决方案,这样我就不会冒着搞乱 crontab 的风险。

Jer*_*y L 9

谷歌搜索path in crontab

root@pingu # cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
Run Code Online (Sandbox Code Playgroud)

您基本上想设置 PATH,然后不必担心变化。此外,快速测试是使用相同的环境变量通过 SSH 在所有机器上运行您的脚本。


Sch*_*hof 7

如果我正在运行单独调度的 cron 作业(crontab 中的单独一行),我将在测试时每隔一分钟或每隔一分钟对其进行调度。一旦经过测试,我将编辑 crontab 行,使其以我想要的频率运行。

作为旁注,如果我想测试 cron 本身是否正常工作,并将结果通过电子邮件发送到正确的地址(非常重要),我将以下行添加到我的 /etc/crontab:

 * * * * * root ls /doesnotexistfoobar
Run Code Online (Sandbox Code Playgroud)

每分钟运行一次,并尝试ls在不存在的目录上执行操作。应该每分钟通过电子邮件发送失败消息。当我开始工作时,我会注释掉该行。

回到您的问题:您可能不想修改现有的 cron 作业以使其经常运行,这既是因为有可能忘记将其改回来,也因为经常运行您的 cron.hourly、cron.daily 或 cron.whatever可能有副作用,这取决于你在那里得到了什么。为了确保您在从 cron 调用时将在相同的环境中运行脚本,我建议修改上面的“ls”技巧:

在 crontab 中添加一行以直接运行脚本:

 * * * * * root /etc/cron.hourly/customscript
Run Code Online (Sandbox Code Playgroud)

这样您就可以根据需要经常运行它来测试它。