值班室打电话过来,提醒说监控平台中某台TCU集群服务器告警,磁盘空间不足。
连上服务器,使用df -h查看当前磁盘使用情况,居然已经93%了。
通过查看目录大小命令
du -sh *
发现是Nginx服务的日志已经100多G了。
前期部署服务时,已经通过定时任务+sh命令分割了Nginx日志,并按时间进行清理,怎么会日志有这么大。
带着困惑,开始检查原因。
1、检查定时任务
定时任务
2、检查服务是否执行
定时服务状态
看起来都是正常的,但是为什么执行不成功呢?首先考虑的是检查crontab执行的日志。
那么问题又来了,如何查看crontab的日志记录呢?
有两种方式可以查看定时任务日志:
1、通过查看系统日志目录下的定时任务日志
tail -300 /var/log/cron
不同的安装方法、不同的系统版本,定时任务的日志目录可能不同,不能一概论之。
2、通过查看当前用户mail
tail -300 /var/spool/mail/root
通过查看日志,发现定时任务执行时,报错如下:
/bin/sh: root: command not found
怀疑是脚本有问题,执行脚本后却发现是正常的。那问题在哪里?为什么会提示root命令没找到?
按错误的关键词在网上搜索了下,没有找到答案,一时不知道该怎么办了。
难道是crontab配置问题?在网上搜索了下,发现了一个比较有趣的现象。
定时任务有两种配置方式:
1、在/etc/crontab下设置,需要指定用户名
2、直接用crontab -e,不需要指定用户
问题原因算是找到了,原来开发人员在部署时,在定时任务配置项中添加了root用户,导致命令执行时,把root当做命令来执行了。把配置中的root删除后,第二天检查时,定时任务正常执行完成。
定时任务情况
最后需要重点提醒的是:在定时任务(crond)中,最好把执行脚本或命令的全路径加上,否则经常出现执行失败,找不到指令文件的异常。如下图: