如何测试新的Cron脚本?


14

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

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

Answers:


9

Google搜索开始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

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


谢谢,我没有想过crontab就像脚本一样,可以在crontab中声明环境变量。
gareth_bowles

7

如果我正在运行一个单独计划的cron作业(crontab中的单独一行),我将在测试时每隔一分钟或每隔一分钟进行一次调度。测试完成后,我将编辑crontab行,使其以所需的频率运行。

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

 * * * * * root ls /doesnotexistfoobar

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

回到您的问题:您可能不想将现有的cron作业修改为经常运行,这既是因为有可能忘记将其更改回去,又是因为经常运行cron.hourly,cron.daily或cron.when可能会有副作用,具体取决于您所处的位置。为了确保您在与从cron调用时所用的脚本相同的环境中运行脚本,建议您修改上面的“ ls”技巧:

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

 * * * * * root /etc/cron.hourly/customscript

这样,您可以根据需要对其进行多次测试。


谢谢-如果我也可以投票作为正确的答案,我会的!
gareth_bowles

0

我不知道有更直接的解决方案,但是您可以创建一个具有privs脚本的用户(例如crontest),并使用特定于用户的crontab来为“ crontest”用户通过编辑脚本来测试脚本以便在接下来的几分钟内运行脚本。

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.