【问题标题】:How to print the output of running program started by crontab job to a file on daily basis如何每天将 crontab 作业启动的运行程序的输出打印到文件中
【发布时间】:2014-04-11 08:11:02
【问题描述】:

crontab 中注册了一个脚本start.sh 以每天运行

但我想将程序的输出保存到文件中,例如cronlog-yyyyMMdd.log

我尝试了以下方法但失败了:

16 10 * * 1-5 ~/start.sh >> ~/cronlog/$(date+"\%F")-cron.log 2>&1

有人帮帮我吗?

【问题讨论】:

  • 不要使用相对路径。使用完整的:/bin/sh /home/youruser/start.sh 和输出文件相同。
  • 您需要在 date+ 格式说明符之间留一个空格。祝你好运。
  • @fedorqui 请问为什么不应该使用相对路径?
  • @shellter 空间是关键。谢谢。您应该在下面回答,以便我可以将您的话标记为答案。
  • @user838204 :谢谢,我已经发布了完整的答案。很高兴它对您有所帮助。

标签: linux shell crontab


【解决方案1】:

对提到的所有程序和文件使用完全限定的路径可以消除调试 crontab 条目问题的一整类错误。在这种特殊情况下,这样做只会证明您的 crontab 条目中的 PATH 问题没有问题。

您的问题是您需要在 date cmd 和它的格式化参数字符串之间有一个空格字符,而不是

$(date+"\%F")
#0    ^v
$(date +"\%F")

我赞扬你良好的 crontab 调试礼仪;将 std-err 和 std-out 捕获到文件中可以为您提供 1. 证明您的命令按预期运行(或者如果您的时间规范中有错误,它会显示 cmd 运行的时间)。 2. 你避免让你的 localhost 邮箱充满来自 cron 守护进程的 msgs。 3 生成的任何 std-err 消息也会被捕获,并且通常与 std-out 消息保持同步和时间顺序。

IHTH。

【讨论】:

  • 我了解将crontab 结果输出到文件的好处,但仅使用文件不是一个好主意。这就是为什么我想将结果输出到不同的文件
【解决方案2】:
16 10 * * 1-5 ~/start.sh >> ~/cronlog/$(date +"\%F")-cron.log

编辑:如 cmets 中所述,这通过更正提问者尝试输入中的错字来回答问题

【讨论】:

  • 虽然这可能是问题的解决方案,但您能否就它的作用发表评论?
  • 问题它自己有答案,我只是纠正它的错字
  • 那么它应该是一个编辑建议或评论。不是答案,因为它不是答案。
  • 下次我将使用 cmets。我是这个网站的新手。顺便说一句,谢谢你指出来
  • 仔细查看问题和答案后,您的帖子是正确的,但需要解释问题所在。阅读您的答案,并不能立即看出这只是一个缺失的空格。
猜你喜欢
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
相关资源
最近更新 更多