开发过程中,服务器会产生很多日志,随着日志越来越多,日志文件越来越大,磁盘的占用也会增大。所以使用linux的定时任务来管理维护日志是必不可少的!首先,要了解一下Linux的定时任务!
Linux定时任务crontab
/etc/crontab
此文件负责调度各种管理和维护任务,在/etc/
下还能看到很多目录/etc/cron.hourly
、/etc/cron.daily
、/etc/cron.weekly
、/etc/cron.monthly
都是用来存放定时任务执行的脚本,可以很清楚的就能找到每小时/天/星期
或者每月
执行一次的脚本!
常用命令
# 查看定时任务表
crontab -l
# 编辑定时任务表
crontab -e
# 删除定时任务表
crontab -r
cron表达式
定时任务是通过cron表达式编写的一个执行单元(简单来说就是一条命令),命令分为 时间+动作 (关于动作就比如:可以去执行脚本、或执行服务等等),其中时间可以分为分、时、日、月、周
五种,操作符有4种,如下列表格:
操作符 | 说明 |
---|---|
* | 取值范围内的所有数字 |
/ | 每过多少个数字 |
- | 从X到Z |
, | 散列数字 |
# 每1分钟执行一次
* * * * *
# 每小时的第3和第15分钟执行
3,15 * * * *
# 在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * *
# 每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * *
# 每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1
# 每晚的21:30执行
30 21 * * *
# 每月1、10、22日的4:45执行
45 4 1,10,22 * *
# 每周六、周日的1:10执行
10 1 * * 6,0
# 每天18:00至23:00之间每隔30分钟执行
0,30 18-23 * * *
# 每星期六的晚上11:00pm执行
0 23 * * 6
# 每一小时执行
0 */1 * * *
# 晚上11点到早上7点之间,每隔一小时执行
0 23-7/1 * * *
日志管理维护
需求: nginx的error.log和access.log需要每天在23:55进行打包(格式:error_date +%Y-%m-%d
.tar.gz),和清空日志文件并保留15天
前置操作:
cd /data/openresty/nginx/logs/
mkdir script
# 创建脚本,然后粘贴以下脚本内容,并保存
touch clean_log.sh
# 附加执行权限
chmod -x clean_log.sh
脚本内容如下:
#!/bin/bash
#定义变量
fileName=access.log
fileName1=error.log
logs_dir=/data/openresty/nginx/logs
bak_file=access_`date +%Y-%m-%d`
bak_file1=error_`date +%Y-%m-%d`
#执行压缩文件的命令
tar -zcvf $logs_dir/$bak_file.tar.gz $logs_dir/access.log
tar -zcvf $logs_dir/$bak_file1.tar.gz $logs_dir/error.log
echo "job is beging......."
# >文件 为清空该文件内容
>$logs_dir/$fileName
# 查询到超过15天的文件就删除掉,可以通过-name "error.log"指定删除文件,也删除全部满足条件的文件
find /data/openresty/nginx/logs -mtime +15 -exec rm -rf {} \;
>$logs_dir/$fileName1
find /data/openresty/nginx/logs -mtime +15 -exec rm -rf {} \;
echo "job is end......."
\
编辑定时任务列表
# 编辑定时任务粘贴以下内容至定时任务列表中
crontab -e
# 粘贴以下内容至定时任务列表中
55 23 * * * sh /data/openresty/nginx/logs/scripts/clean_log.sh
# 保存并退出后,你会发现以下内容,证明更新了定时任务列表
# 最后就等待定时任务自己执行就可以了,如果你测试的话可以执行每分钟执行一次,先看一次定时任务执行后的结果!
crontab: installing new crontab