Linux 定时删除 10 天前的日志文件
背景
我们的程序在 Linux 上运行会产生大量日志文件,这些日志文件如果不定时清理的话会很快将磁盘占满
说明
1 | # For details see man 4 crontabs |
配置
配置一个定时清理的任务
crontab -e
, 添加一个定时任务, 或者vim /etc/crontab
添加一条记录
1 | 10 0 * * * /home/liufa/app/cron/del_log.sh > /dev/null 2>&1 & |
1 | 10 0 * * * root sh /home/liufa/app/cron/del_log.sh > /dev/null 2>&1 & |
每天 0 点 10 分运行上述命令文件
创建文件: del_log.sh
授权
chmod +x ./del_log.sh
删除 10 天的日志文件
1 |
|
- 重启定时任务,
systemctl restart crond
, 在 Ubuntu 上叫 cronsystemctl restart cron
关于定时任务的配置目录
/etc/crontab
文件, 系统级别的定时任务,需要加入用户名/var/spool/cron
目录, 以用户作为区分,一般会有一个和用户名相同的文件,里面记录了定时任务, 一般使用 crontab -e 创建, 语法中不需要指定用户名/etc/cron.d/
和 crontab 文件类似,需要指定用户名
cron执行时,也就是要读取三个地方的配置文件
注意
- 执行脚本使用/bin/sh(防止脚本无执行权限),要执行的文件路径是从根开始的绝对路径(防止找不到文件)
- 尽量把要执行的命令放在脚本里,然后把脚本放在定时任务里。对于调用脚本的定时任务,可以把标准输出错误输出重定向到空。
- 定时任务中带%无法执行,需要加\转义
- 如果时上有值,分钟上必须有值
- 日和周不要同时使用,会冲突
>>
与>/dev/null 2>&1
不要同时存在
日志位置
日志位置位于 /var/log/cron.log,如果没有看到日志,可能由于没有开启 cron 日志记录,开启方法:
vim /etc/rsyslog.d/50-default.conf
/var/log/cron.log相关行,将前面注释符#去掉
重启 rsyslog
service rsyslog restart
或者查看系统日志, 使用命令:
grep cron /var/log/syslog
能看到和 cron 相关的日志信息
任务脚本中变量不生效
在脚本里除了一些自动设置的全局变量,可能有些变量没有生效, 当手动执行脚本OK,但是crontab死活不执行时,在脚本里使用下面的方式
1)脚本中涉及文件路径时写全局路径;
2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量
1 |
|
- */1 * * * * . /etc/profile;/bin/sh /path/run.sh