题 如何测试新的cron脚本?


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

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


14
2017-11-13 19:45






答案:


谷歌搜索 上 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运行脚本。


9
2017-11-13 19:48



谢谢,我没有说过crontab就像一个脚本,因为你可以在crontab中声明环境变量。 - gareth_bowles


如果我正在运行一个单独安排的cron作业(crontab中的一个单独的行),我会在每一分钟或每隔一分钟安排一次,因为我正在测试它。一旦测试完毕,我将编辑crontab线,使其按照我想要的频率运行。

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

 * * * * * root ls /doesnotexistfoobar

每分钟运行,并尝试做一个 ls 在不存在的目录上。应该每分钟发送一封失败消息。当我开始工作的时候,我会对这条线路进行评论。

回到你的问题:你可能不希望修改现有的cron作业以便经常运行,因为有可能忘记更改它,并且因为运行你的cron.hourly,cron.daily或cron.whatever可能有副作用,取决于你在那里得到的东西。为了确保您在从cron调用的同一环境中运行脚本,我建议修改上面的“ls”技巧:

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

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

这样你就可以经常运行它来测试它。


7
2017-11-14 02:34



谢谢 - 如果我也可以投票给这个正确的答案,我会的! - gareth_bowles


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


0
2017-11-13 19:50