crontab执行任务的时候希望输出日志,但是日志之需要保留一段时间会自动清理掉,不然会把磁盘装满的。因此,就希望系统自动去删除。幸好,tmpwatch这个服务会自动清理/tmp目录(主要文件不要放/tmp目录),只要安装好tmpwatch这个包就可以了,这个依赖crontab执行的。那现在就需要把crontab日志输出到带日期的文件名中就可以了。
crontab设置
使用crontab -e进行任务编辑,不推荐直接编辑/var/spool/cron/下的文件,有些错误不提示
crontab -e
* * * * * /home/linuxyunweicai/job.sh >> /tmp/job.log.$(date %Y%m%d) 2>&1
新建的job等2分钟才会开始执行,如果需要马上执行,直接重启一下crond服务就可以了。
发现没有日志生成,看下cron的日志/var/log/cron
Jun 2 13:44:01 linuxop CROND[23261]: (root) CMD (home/linuxyunweicai/job.sh >> /tmp/job.log.$(date )
后面的东西就没了,因此应该是%的原因:在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date %Y%m%d在crontab里是不会执行的,应该换成date \%Y\%m\%d。
修改任务
* * * * * /home/linuxyunweicai/job.sh >> /tmp/job.log.$(date \%Y\%m\%d) 2>&1
这样子就可以了,在/tmp目录下会生成job.log.20180602的日志文件,tmpwatch默认是清理10天前的文件,这样子就不怕日志文件没有清除导致磁盘爆满。
tmpwatch设置
tmpwatch的配置文件是放到 /etc/cron.daily/tmpwatch,这个目录的脚本,cron每天会执行一次,这里就是一个shell脚本,如果需要修改日志保留时间可以修改这个脚本。
#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
-X '/tmp/hsperfdata_*' -X '/tmp/.hdb*lock' -X '/tmp/.sapstartsrv*.log' \
-X '/tmp/pymp-*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d "$d" ]; then
/usr/sbin/tmpwatch "$flags" -f 30d "$d"
fi
done
总结
Linux是不是很简单而强大呢!
,