每天早上10点crontab设置为在bash脚本中运行此命令(以下日期是一个示例,它们是使用脚本中的linux date命令计算的):
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运行脚本时,hg日志只有空。
解决:我需要为cron指定hg的完整路径(/ usr / local / bin / hg)才能看到它。有点奇怪,因为它不需要有svn的完整路径,并且它之前没有完整的hg路径就可以正常工作。
如何查看cron在PATH中的含义?
答案 0 :(得分:0)
crontab
的环境非常有限。如果您假设您的.profile(或等效的)可以获得某些变量,则很可能不会存在。如果您需要它,您必须将其源于您的脚本。
看起来您还包含了一个较长脚本的片段。制作应该工作的最简单的脚本并将其添加到cron。这将使调试更容易。例如,如果您在脚本中对日期进行硬编码,则应该能够使其工作。一旦你开始工作,你就可以逐渐增加复杂性,直到找出什么不起作用。