2012-11-29 43 views
0

每天早晨在10:00的crontab是设置运行在一个bash脚本此命令(下面日期是一个例子,它们使用在脚本在linux日期命令计算):奇怪hg的日志输出

hg log -R some-repo -b some-branch --date "2012-11-28 10:00 to 2012-11-29 10:00" 

上述命令在所有开发人员推送其代码的远程回购服务器上运行。输出存储在一个字符串中,并通过电子邮件发送给我。但它总是空的!如果几分钟后手动运行脚本,我会得到预期的输出。

我比较了crontab运行脚本之前的历史记录,并验证确实已经提交/推送到远程仓库。

任何想法为什么在10:00后运行上述脚本会提供正确的输出,而不是在10:00时运行?

在脚本我这样做:

logString=$(hg log -R "$path-to-repo" -b $branch --date "$YESTERDAY to $TODAY") 
if [ -z "$logString" ]; then 
    logString="Nothing" 
fi 

编辑:当脚本由运行crontab汞日志仅是空的。

解决:我需要为cron指定hg(/ usr/local/bin/hg)的完整路径来查看它。有点奇怪,因为它不需要svn的完整路径,它以前工作良好,没有完整的路径到hg。

如何查看cron在PATH中的含义?

+0

在哪个用户下执行此crontab作业?截取作业的错误也可能 - 它可能不能验证 –

+0

我登录并手动运行脚本的用户。 svn提交的日志也会生成/发送,并且工作正常。 – u123

+0

Stderr ?!并且“10之后”在crontab中输出正确或仅用手? –

回答

0

crontab环境非常有限。如果您假定某些变量将从您的.profile(或等价物)中可用,那么它很可能不会在那里。如果你需要它,你将不得不将它源码到你的脚本中。

它看起来像你你已经包含一个更长的脚本片段。制作最简单的脚本,并将其添加到cron中。这将使调试更容易。例如,如果您在脚本中对日期进行硬编码,则应该能够使其工作。一旦你有了这个工作,你可以逐渐增加复杂性,直到你找出什么不起作用。

+0

是的,这就是我刚才所做的,现在它下来到一行,问题是我需要在脚本中指定hg可执行文件的完整路径以供cron查看。当我手动运行它时,这不是必需的 – u123