0

每天早上 10:00 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 中的内容?

4

1 回答 1

0

crontab环境非常有限。如果您假设某些变量将从您的 .profile (或等效项)中可用,则很可能不会存在。如果您需要它,则必须将其来源到您的脚本中。

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

于 2012-11-29T22:05:16.093 回答