说说crontab那点事(一)-crontab重定向

    使用crontab定时执行脚本是常有的事,在初始使用改命令的时候,肯定也觉得没有什么太多的讲究,随着深入的运用,也会慢慢踩各种坑,今天就说说crontab的那点事。主要从crontab的重定向和crontab的环境变量两个方面进行展开。 

   首先说说crontab的重定向。

   我们知道,如果crontab命令有输出内容的话,该输出内容会以邮件的形式发送给用户,内容存储在邮件文件/var/spool/mail/$user中。另外,我们也知道crontab功能是在一定的时间间隔调度一些命令来执行,如果命令执行比较频繁,如一分钟执行一次,或者命令数据内容较多,会使这个邮件文件不断追加内容,文件越来越大。而邮件文件一般存放在根分区,根分区一般相对较小,所以会造成根分区写满而无法登录服务器。

    举例说明,某项目的系统访问不了,nginx的报错提示没有空间:

     但是使用df -h命令,根部空间只是用到50%,但是使用df -i命令,已使用100%。

     注:df -h 关注剩余空间  df -i 关注剩余inode

       通过for i in /*; do echo $i; find $i |wc -l|sort -nr; done命令追溯,最终发现是/var/spool/clientmqueue中有大量文件,产生大量文件的原因,就是因为cron执行时会将相关结果以mail方式发送至执行用户的账号,可是当sendmial没有启动,那么所有信件就会暂存在这个目录中,此时就会出现这种情况。

     所以说crontab的重定向很重要。

    将产生的文件重定向到某个文件下或者/dev/null。例如:

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

/dev/null 代表空设备文件
> 代表重定向到哪里,例如:echo "123" > /home/123.txt
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1

那么>/dev/null 2>&1的意思就是:
标准输出重定向到空设备文件,也就是不输出任何信息到终端,标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

 

另外,重定向还有另外一个作用,即能产生日志,在执行定时任务时,并没有预期的输出结果时,可以使用重定向,将报错信息写入到指定文件,进行查看。

 

附: 禁止crontab产生大量文件的方式还有一种,即禁止其产生邮件,编辑crontab文件,crontab -e  在第一行中加入mainto="" 。然后保存退出,重启crond。

 

 

 

 

 

posted on 2018-04-05 16:43  yaofengc  阅读(4728)  评论(0编辑  收藏  举报

导航