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

 更新时间:2023年04月07日 15:40:34   作者:o王o  
这篇文章主要介绍了解读crontab脚本错误日志和正确的输出写入到文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

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

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

/var/spool/mail/$user

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

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

不输出内容

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

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

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

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

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

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

*/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 * * * * commond > /tmp/t.log 2>&1

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

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

#!/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 * * * *  commond 2>&1 | xargs $HOME/datecrontalog.sh /tmp/t.log

总结

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

相关文章

  • linux中expect的介绍与使用示例

    linux中expect的介绍与使用示例

    expect是一种自动交互语言,能实现在shell脚本中为scp和ssh等自动输入密码自动登录。下面这篇文章主要介绍了linux中使用expect的方法示例,需要的朋友可以参考借鉴,下面来一起学习学习吧。
    2017-01-01
  • ubuntu19.04安装教程(图文步骤)

    ubuntu19.04安装教程(图文步骤)

    这篇文章主要介绍了ubuntu19.04安装教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-10-10
  • Apache后缀名解析漏洞分析和防御方法

    Apache后缀名解析漏洞分析和防御方法

    这篇文章主要介绍了Apache后缀名解析漏洞分析和防御方法,后缀解析漏洞通常通过伪造PHP后辍,来上传文件到服务器中,很致命的一漏洞,需要的朋友可以参考下
    2014-08-08
  • Apache控制是否显示站点目录(推荐)

    Apache控制是否显示站点目录(推荐)

    这篇文章主要介绍了Apache控制是否显示站点目录(推荐)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • CentOS服务器平台搭建mysql主从复制与读写分离的方法

    CentOS服务器平台搭建mysql主从复制与读写分离的方法

    这篇文章主要介绍了CentOS服务器平台搭建mysql主从复制与读写分离的方法,结合实例形式较为详细的分析了CentOS平台搭建mysql主从复制与读写分离的步骤、设置方法、相关操作技巧与注意事项,需要的朋友可以参考下
    2018-04-04
  • Linux里LVM磁盘扩容详细步骤

    Linux里LVM磁盘扩容详细步骤

    大家好,本篇文章主要讲的是Linux里LVM磁盘扩容详细步骤,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下哦,方便下次浏览
    2021-11-11
  • 关于CentOs系统自带python和yum卸载后的解决办法

    关于CentOs系统自带python和yum卸载后的解决办法

    前几天因项目需要,在服务器上搭建python-mysql模块,结果没安装好,于是乎想卸载重装,遂在网上查询卸载python的方法,结果一不小心直接把系统的python删了个干净,怎么处理呢,看看小编给大家带来的本篇教程吧
    2018-11-11
  • 浅谈Linux文件目录介绍及文件颜色区别

    浅谈Linux文件目录介绍及文件颜色区别

    这篇文章主要介绍了浅谈Linux文件目录介绍及文件颜色区别,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 在Linux中限制root用户SSH远程登录的流程详解

    在Linux中限制root用户SSH远程登录的流程详解

    在Linux系统中,root用户拥有最高权限,因此为了增强系统安全性,我们通常会限制root用户通过SSH远程登录,本文将介绍如何在Linux系统中限制root用户的SSH远程登录,需要的朋友可以参考下
    2024-03-03
  • linux IPC之socket解析及实例代码

    linux IPC之socket解析及实例代码

    这篇文章主要介绍了linux IPC之socket解析及实例代码,分享了服务端和客户端两端的实例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01

最新评论