从cron输出stderr到文件和电子邮件

时间:2016-06-09 15:44:15

标签: ubuntu cron output sh stderr

我有Ubuntu服务器,我有一个运行python脚本的cron作业。 我知道我可以在crontab中添加MAILTO=的stderr输出。我也知道将stdout和stderr输出到文件的标准方法是使用2>&1重定向。这是我的第一个问题。

无论我使用什么,我都会收到错误/bin/sh: 1: Syntax error: Bad fd number。几个小时后,我意识到这取决于sh版本。我可以将所有内容输出到文件的唯一方法是使用此命令00 00 * * * /usr/bin/python3 /data/script.py >& /data/logs/date +\%d_\%m_\%Y_out.log。我在互联网上发现它属于cshtcsh。我不明白,因为我在我的系统上使用bash。为什么像>>/log.txt 2>&1这样的标准重定向对我没用?

我的第二个问题是我想继续将stdout和stderr写入文件,并希望继续通过MAILTO向stderr发送电子邮件。我试图使用tee命令但没有任何成功。 非常感谢你的帮助

1 个答案:

答案 0 :(得分:1)

您可以将变量添加到crontab文件的开头,以确保使用正确的shell。对于第二个问题,您可以使用“tee”命令,该命令将从STDIN发送到STDOUT,并将其保存到文件中:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <!-- ignore x-inside-a -->
 <xsl:template match="//div[@class='a']/div[@class='x']"/>

 <!-- place the x-inside-a into each b after text() and b1 -->
 <xsl:template match="div[@class='b']">
  <xsl:copy>
   <xsl:copy-of select="//div[@class='a']/div[@class='x']" />
   <xsl:apply-templates />
  </xsl:copy>
 </xsl:template>

</xsl:stylesheet>