2011-11-15 83 views
25

我最近添加了一个cron作业,但在发出命令时在路径中出错,因此作业从未成功。有什么方法可以测试我们已经完成的cron更改吗?测试运行cron条目

请注意,我确实复制并粘贴了命令行中的命令,这只是一个流氓按键造成的。

回答

20

这个问题也被问过serverfault and has garnered a couple additional answers

以下是Marco's solution转述的版本: (不知道是否最好ediquite没有提供链接只能回答或不复制别人的解决方案)

使用临时cron项创建一个环境文件

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

然后创建一个名为run-as-cron一个shell脚本执行使用塔指令t环境。

#!/bin/sh 

. "$1" 
exec /usr/bin/env -i "$SHELL" -c ". $1; $2" 

然后它被用于这样的:

run-as-cron <cron-environment> <command> 

例如

run-as-cron /home/username/cron-env 'echo $PATH' 
+0

你从哪里得到命令**运行-as-cron的**? –

+0

@IgorGanapolsky我不确定,但它可能是上面的shell脚本的名称。 – ptf

+0

“创建一个名为run-as-cron的shell脚本” – RichardAtHome

38

当我想测试我的cron作业时,我通常将间隔设置得非常低,并密切监视日志。当我确信输入正确时,我将间隔设置回理智的值。

例如,运行作业每两分钟:

*/2 * * * * echo "Hello World"

而且我在我的日志文件运行tail -f(在Debian /var/log/syslog)。

+6

这就是我所做的,除了有一分钟......但我希望有一种方法可以让crontab使用命令运行它,这样就不必总是等待一分钟直到crontab执行命令,只是为了看看它是否会运行。 – Teekin

+0

最接近的是通过运行'/ bin/sh'。再次,你不应该直接从cron运行复杂的命令。改为使用外部脚本! –

+2

确切的说,当/ bin/sh运行但不是cron作业时,即使它只是等待下一次40-50秒才能调试它,也会非常令人沮丧。 – Teekin

2

乔舒亚的答案不适用于我。两个问题:在cron-env文件

  • 变量不会被导出(set -a需要)。

  • 脚本仍然绑定到当前tty(需要setsid)。

脚本run-as-cron

#!/bin/sh 

. "$1" 
exec setsid /usr/bin/env -i "$SHELL" -c "set -a; . $1; $2" </dev/null 

没有足够的代表”来解决他的答案或添加评论...

0

使用命令crontab -e命令 这将打开一个vim编辑器所有你需要做的是 * * * * * /somepath/urscript.sh,确保在日期和脚本路径之间有适当的空格 执行后,你可以检入/ var/spool /邮件会有脚本执行或错误的完整跟踪。 对于测试是没有办法..但如果你的urscript.sh工作,然后cron选项卡将没有问题,因为它是手动完全相同的事情。