Answers:
检查您使用cron运行的程序是否具有自己的日志文件。如果他们只是将其输出写入标准输出,则可以将其重定向到文件或通过邮件发送给您。在crontabs内部,标准Shell重定向有效。
例如,将错误输出重定向some_job.sh
到some_job.err
并丢弃标准输出(即将其发送到/dev/null
),将以下重定向添加到您的crontab
33 3 * * * /path/to/some_job.sh 1> /dev/null 2> /other/path/to/some_job.err
或邮寄给您(如果mail
有)
33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" you@example.org
/dev/null
吗?
some_job.sh
的stdout 重定向到stder,/dev/null
然后再重定向到stdout(现在不再包含自身)。这样,只有其stderr会以stdout结尾并传递给mail
。
我使用过的平台上的大多数cron守护程序会自动将用户cron作业的stdout / stderr通过电子邮件发送给该作业的crontab用户。我忘了整个系统会发生什么(来自/ etc / crontab的非用户特定的cron作业)。问题是人们不再总是在大多数类似Unix的OS上设置邮件程序守护程序(即sendmail,qmail或postfix之类的邮件传输代理(MTA))。因此,cron作业输出的邮件只是在一个本地邮件后台打印文件夹死的地方,如果他们甚至可以说远。因此,一个答案可能只是启动您的邮寄程序守护程序,并可能确保您具有〜/ .forward文件,以将本地邮件转发到您的“真实”电子邮件帐户。
如果您希望作业写入特定的日志文件,则可以使用标准输出重定向(如@honk建议),或者假设cron作业是Shell脚本,则可以让脚本调用logger(1)或syslog(1)或操作系统提供的用于向syslog发送任意消息的任何其他命令行工具。然后,您可以使用操作系统的内置方法来配置将哪些类型的消息记录到何处,也许可以通过编辑/etc/syslog.conf来进行。
我的大多数cron作业都调用bash脚本,这些脚本是我为特定原因由cron启动而专门编写的。在这些脚本中,尤其是当我最初编写和调试它们时,我喜欢使用bash的“ set -vx”使Shell脚本的每一行的未扩展和扩展形式在执行前先写入stdout。请注意,从cron开始的shell脚本被认为是非登录,非交互式shell,因此不会运行您的标准shell启动脚本,例如.bashrc和.profile。如果使用bash并希望bash运行启动脚本,则必须在crontab中定义作业的行之前定义环境变量“ BASH_ENV = / path / to / my / startup / script”。
mail
命令从命令行读取消息。或看看/var/spool/mail
。但是,如果您安装了postfix或除标准sendmail以外的其他邮件程序,则需要另一种读取消息的方法。
mail -s "cron output" test@example.com
效果很好:/
less $MAIL
如果要查看当前用户的cron输出,或者less /var/spool/mail/root
要查看以root身份运行的命令的cron输出,请通过运行查看它。
最简单的方法是捕获打印错误,然后将其保存到文件中。我有一个cronjob,它调用php命令行,如下所示:
1 0 * * * php /pathOfMyApp/index.php controllerName函数名称> / pathOfMyApp / log / myErrorLog 2>&1
'>'之前的部分是我的cronjob,而'>'之后的部分是捕获并保存在项目根目录中的日志文件夹中的文件中,但是可以放在所需的位置。注意:每次调用cronjob时,他都会覆盖上一个日志。您可以使用“ >>”在现有文件的末尾写入或搜索“ cat”终端命令。
如果crontab使用'curl'或'wget'并引用了链接,则可以在/ var / log / httpd / appName中搜索访问日志,如果cron返回500或400一定是错误的。
最后,您也可以检查/ var / log / messages。
我更喜欢获得有关cron作业的电子邮件报告。刚放
MAILTO=yourmail@domain.com
进入crontab,您将收到一封电子邮件。当然,您必须为您的帐户配置电子邮件。