解读crontab脚本错误日志和正确的输出写入到文件

吾爱主题 阅读:143 2024-04-05 15:07:18 评论:0

crontab脚本错误日志和正确的输出写入到文件

如果crontab不重定向输出,并且crontab所执行的命令有输出内容的话,是一件非常危险的事情。

因为该输出内容会以邮件的形式发送给用户,内容存储在邮件文件

?
1 /var/spool/mail/ $user

如果命令执行比较频繁(如每分钟一次),或者命令输出内容较多,会使这个邮件文件不断追加内容,文件越来越大。

而邮件文件一般存放在根分区,根分区一般相对较小,所以会造成根分区写满而无法登录服务器。

不输出内容

?
1 * /5 * * * * /root/XXXX .sh &> /dev/null 2>&1 

将正确和错误日志都输出到 /tmp/load.log

?
1 * /1 * * * * /root/XXXX .sh > /tmp/load .log 2>&1 &

只输出正确日志到 /tmp/load.log

?
1 * /1 * * * * /root/XXXX .sh > /tmp/load .log &  等同于   * /1 * * * * /root/XXXX .sh 1> /tmp/load .log &

只输出错误日志到 /tmp/load.log

?
1 * /1 * * * * /root/XXXX .sh 2> /tmp/load .log & 

名词解释

在shell中,每个进程都和三个系统文件相关联:标准输入stdin,标准输出stdout和标准错误stderr,三个系统文件的文件描述符分别为0,1和2。所以这里2>&1的意思就是将标准错误也输出到标准输出当中。

> 就相当于 1> 也就是重定向标准输出,不包括标准错误。

通过2>&1,就将标准错误重定向到标准输出了(stderr已作为stdout的副本),那么再使用>重定向就会将标准输出和标准错误信息一同重定向了。

如果只想重定向标准错误到文件中,则可以使用2> file。

crontab重定向错误日志 加上时间

在开发中,我们避免不了写crontab脚本来异步执行一些东西,一般设置crontab用下面的方法

?
1 * /1 * * * * commond > /tmp/t .log 2>&1

后面的 2>&1 代表把标准错误输出指向标准输出,意思是当commond异常退出时,把异常退出时的日志也写到 /tmp/t.log 下面,这时记录的日志是没有时间信息的,就是说日志里的数据没有办法知道是什么时候打印出来的。

下面通过一个shell来解决这件事,代码如下

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/bin/bash     if [ $ # -gt 1 ]; then      istring= ''      #去掉回车      date =` date | tr -s [ "\n" ]`      for (( i = 2; i <= $ #; i++ ))      do          string=$string " " ${!i}      done          c=$ date ": " $string      echo "" >> $1      echo $c >> $1 fi

把上面的代码放到根目录下,保存为 datecrontalog.sh

然后在crontab -e用下面的脚本代替

?
1 * /1 * * * *  commond 2>&1 | xargs $HOME /datecrontalog .sh /tmp/t .log

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/u012129607/article/details/80418149

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容