@[TOC] crontab定时清理10天前文件
需求场景
搭建了日志服务器,日志文件夹10天就满。需要一个定时任务自动清理10天前的日志文件与文件夹
使用crontab实现
centos默认会安装crontab,查看是否安装:
rpm -qa | grep crontab
显示如下就说明已经安装
查看crontab运行状态
systemctl status crond
如下图,显示active,说明已经运行,默认开机自启动
编写sheel脚本,用root权限,文件需要可执行权限
文件名:auto-del-10-days-ago-log.sh
#!/bin/bash
#这个是打印时间,后面会讲到原因,正常不需要
date >> /var/log/date.txt
directory="/var/log/remote/"
tenDaysAgo=$(date -d '10 days ago' +%s)
#先做打印测试
# find "$directory" -type f -mtime +10 -print
# find "$directory" -type d -empty -mtime +10 -print
find "$directory" -type f -mtime +10 -exec rm {} \;
find "$directory" -type d -empty -mtime +10 -exec rm -r {} \;
设置定时任务,有两种方式,
第一种:crontab -e
这种可以用crontab -l 查看,crontab -l的命令配置在/var/spool/cron/root 下
第二种:编辑文件/etc/crontab
这种无法通过crontab -l查看,只能通过 下述命令查看
cat /var/log/cron
编辑定时任务:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
#这一行是因为我系统时间问题,特意增加,后面会讲
CRON_TZ=Asia/Shanghai
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
#这就是我增加的任务,每天23:59自动清理10天前的文件
59 23 * * * root /bin/sh /root/auto-del-10-days-ago-log.sh
可通过查看日志发现是否执行
问题
配置上述完后,发现手动执行没问题,改成每分钟执行没问题,第二天通过cat /var/log/cron查看,发现执行了定时任务,但是时间点差了11个小时。但是系统时间,时区都对。
因为我时间同步用的ntpdate,这有个缺席就是过时不会自动同步,所以换了chrony
yum install chrony -y
systemctl enable chronyd && systemctl start chronyd
timedatectl
timedatectl set-timezone Asia/Shanghai
timedatectl set-ntp yes
sed -i 's/server /#server /g' /etc/chrony.conf
sed -i '/#server 3.centos.pool.ntp.org iburst/a server ntp.gz.cvte.cn iburst' /etc/chrony.conf
systemctl restart chronyd
chronyc makestep
chronyc sources
查看时区:
more /etc/localtime
cat /etc/localtime
备份:
cp /etc/localtime /etc/localtime.bak
设置本地时区:
cp -pf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改 Contab 时区:
vim /etc/crontab
添加变量 CRON_TZ=Asia/Shanghai
改完这些后,就正常了,无需重启服务和系统