使用 crontab 执行 linux bash脚本定时删除日志文件

背景:

近期项目上线后日志激增,导致存储空间使用超70%。由于该服务器并不仅我自己的项目在使用,考虑到对其他系统的影响并分析了日志构成及重要性,最终决定对日志进行定期清理。

处理方案:

使用crontab服务,根据日志重要程度越高保存时间越长的原则编写脚本清理日志文件。

日志类型类型通配名保存时长
业务类BUSINESS_10D
报错类ERROR_180D
系统消息SYSTEM_7D

该计划氛围三个阶段:

第一阶段:安装crontab

第二阶段:编写脚本,并配置crontab

第三阶段:测试日志处理按计划执行

方案实施:

第一阶段:

1.何为crontab?(wiki)

crontab命令常见于Unix类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρνο),原意是时间。通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

2.为何要选用crontab?

 crontab 语言简洁明了,使用方便且对shell 命令支持良好。

3.安装(默认环境是CentOS7.4)

使用yum安装(略过查看版本,及适配选择步骤)

$ yum -y install vixie-cron

$ yum -y install crontabs

简单介绍下:

vixie-cron 是cron的主程序

crontab 软件包是用来安装、卸载、列举用来驱动 cron 守护进程的表格的程序。

相关操作:

crontab 基本操作

$ service crond start     //启动服务
$ service crond stop      //关闭服务
$ service crond restart   //重启服务
$ service crond reload    //重新载入配置
$ service crond status    //查看crontab服务状态

设置开机自启

 $ chkconfig --list crond

crontab任务操作

$ crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
$ crontab -l //列出某个用户cron服务的详细内容
$ crontab -r //删除没个用户的cron服务
$ crontab -e //编辑某个用户的cron服务

 

任务操作演示

增加一个cron job

$ crontab -e 

#进入编辑模式并键入

$ * * * * * /root/testCrontab.sh

#保存并退出

crontab: installing new crontab

您在 /var/spool/mail/root 中有新邮件

 

展示全部cron jobs

$ crontab -l

* * * * * /root/testCrontab.sh

1 1-12 * * * /root/testCrontab1.sh

*/5 1,12 * * * /root/testCrontab.sh

 

删除某个用户的全部cron jobs

$ crontab -r

您在 /var/spool/mail/root 中有新邮件

$ crontab -l

no crontab for root

至此crontab job 的基本操作您已经学会了,上手试一试如何配置crontab job吧。

 

任务配置:

编写cron job 第一要务就是理解语法,我们已上面展示全部cron jobs 为例

# 文件格式說明
#  ——分鐘(0 - 59)
# |  ——小時(0 - 23)
# | |  ——日(1 - 31)
# | | |  ——月(1 - 12)
# | | | |  ——星期(0 - 7,星期日=0或7)
# | | | | |  ——被执行的命令
# | | | | | |
# * * * * * /root/testCrontab.sh

时间操作符号:

  • 逗号(',')分开的值,例如:“1,3,4,7,8”
  • 连词符('-')指定值的范围,例如:“1-6”,意思等同于“1,2,3,4,5,6”
  • 星号('*')代表任何可能的值。例如,在“小时域”里的星号等于是“每一个小时”,等等
  • 某些cron程序的扩展版本也支持斜线('/')操作符,代表步长。例如:“*/3”在小时域中等于“0,3,6,9,12,15,18,21”等被3整除的数;

好了开始进行尝试配置自己的cron job 吧。

假定我们需要删除10天前的BUSINESS_2019-01-22.log类日志。

编写删除文件脚本,保证每次仅删除10天前的同类型日志文件。

 

文件删除脚本:

//vim编辑模式 input shell commands

$ vi /app/log/del_log.sh


#!/bin/bash

#日志文件路径
path=“/app/log/”

#日志保存时长(天)
logDate=“10”

#通配文件名
fileNm="BUSINESS_*.log"

#删除命令
find $path      -mtime     +$logDate     -name  "$fileNm" -exec rm -rf {} \;
#查找 路径下      创建时间    (-)近内(+)近外  文件名   xxx     对上述文件执行操作

#标记删除日志
echo “whatever whatever whatever” >> /dir1/dir2/someone.txt 
#爱记不记

配置crontab 保证每天在合适的时间段执行该文件删除脚本,为了不影响服务器性能及日常查询,凌晨1~2点是个合适的时段。

界定每日01:10:00 清除10天前的文件。

 

cron job 配置:

$ crontab -e

#input job config

10 1 * * * /app/log/del_log.sh

剩下的就是等待预定时间后验证目标文件是否按照预想被删除掉了。

 

问题排查:

建议前期测试的时候执行间隔尽量短方便观测,如果检查脚本及cron job 配置命令正确却不生效的问题,请参考以下几个地方:

1.使用crontab -l 看是否能正常显示出新增任务

2.查看脚本是否有执行权限

3.crontab 配置任务是不需要重新启动的。如果已知办法都不行,可以尝试重启crontab服务

附上unix命令集:

命令快速索引:

Unix命令行程序和壳层内置命令

文件系统

cat    cd    chmod    chown    chgrp    cksum    cmp    cp    dd    du    df    file    fsck    fuser    ln    ls

mkdir    mount    mv    pax    pwd    rm    rmdir    size    split    tee    touch    type    umask

程序

at    bg    chroot    cron    fg    kill    killall    nice    pgrep    pkill    ps    pstree    time    top

用户环境

clear    env    exit    finger    history    id    logname    mesg    passwd    su    sudo    uptime    talk

tput    uname    w    wall    who    whoami    write

文本编辑

awk    banner    basename    comm    csplit    cut    diff    dirname     ed    ex    fmt    fold    head

iconv    join    less    more    nl    paste    sed    sort    spell    strings    tail    tr    uniq    vi    wc

xargs

壳层内建

alias    echo    expr    printf    sleep    test    true和false    unset    wait    yes

网络

dig    host    ifconfig    inetd    netcat    netstat    nslookup    ping    rdate    rlogin    route    ssh

traceroute

查找

find    grep    locate    whatis    whereis

文档

apropos    help    man

软件开发

ar    ctags    lex    make    nm    strip    yacc

杂项

bc    dc    cal    lp    lpr

Unix实用程序列表

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值