Linux定时任务crontab怎么配合日志切割

风晨同学_4141

风晨同学_4141

2026-09-12

623人浏览

原创

crontab触发日志切割需用绝对路径、设可执行权限、脚本内用绝对路径、正确发送信号;logrotate可通过-f参数配合crontab定时强制轮转;常见失败原因是未通知服务重开日志或信号发错对象。

linux定时任务crontab怎么配合日志切割

crontab 怎么触发日志切割脚本

直接用 crontab -e 添加一行定时命令即可,关键是时间点和执行路径要写对。常见错误是脚本里用了相对路径或没指定环境变量,导致 cron 执行时找不到 LOG_FILE 或权限失败。

示例:每天凌晨 2:05 切割 /var/log/myapp.log

5 2 * * * /bin/bash /opt/scripts/rotate_myapp_log.sh
  • 必须写全路径:/bin/bash 而不是 bash,避免 cron 环境中 PATH 不一致
  • 脚本本身要有可执行权限:chmod +x /opt/scripts/rotate_myapp_log.sh
  • 脚本内所有路径(如 LOG_FILE、LOG_DIR)必须用绝对路径,不能依赖当前工作目录
  • 如果脚本里调用了 kill -USR1,需确保 cron 运行用户有对应进程的信号发送权限(通常 root 更稳妥)

logrotate 怎么通过 crontab 触发

logrotate 本身不常驻,它靠系统级 cron(如 /etc/cron.daily/logrotate)驱动,但你可以手动干预或自定义调度。直接在用户 crontab 里调用 logrotate 是可行的,但要注意状态文件和并发问题。

例如,每小时强制轮转一次 Nginx 日志:

onewo-rtlinux
onewo-rtlinux

Linux 实时编程助手。生成、审查并修改用于周期性控制任务和中断驱动程序的 C 代码。强制实施实时调度策略。

下载
0 * * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx
  • -f 参数强制执行,绕过默认的「一天一次」限制,适合高流量场景
  • 配置文件中必须含 sharedscripts 和 postrotate,否则 kill -USR1 可能只执行一次或漏掉多个 worker 进程
  • 避免多个 cron 同时调用同一配置:logrotate 默认用 /var/lib/logrotate.status 记录时间戳,但加 -f 会跳过该检查,所以得人工控制频率
  • 若用非 root 用户运行,需确认其对日志文件、pid 文件、/var/lib/logrotate.status 有读写权限

为什么 cron 执行脚本后日志没切、磁盘空间也没释放

最常见原因是服务仍在往旧 inode 写日志,而你只重命名了文件名。Linux 进程靠 inode 不靠路径打开文件,mv 不影响写入,但新日志不会自动创建 —— 除非你显式通知服务重开日志或清空原文件。

  • 没发信号:Nginx 需 kill -USR1,rsyslog 需 kill -HUP,MySQL 一般不支持,只能用 copytruncate
  • 信号发错对象:cat /var/run/nginx.pid 返回空?说明 pid 文件不存在或路径不对,脚本里得加判断
  • 用了 rm 或 echo > xxx.log:前者删不掉占用中的文件(df 显示空间未释放),后者会清空但破坏原子性,可能截断正在写的行
  • 脚本里没检查 [ -s "$LOG_FILE" ]:空日志也执行 mv,会导致下次运行时原文件缺失,脚本静默失败

按访问量或内存触发时,cron 频率怎么设才合理

不能无脑高频轮询。太密(如每分钟)会加重系统负担;太疏(如每小时)可能错过阈值窗口。核心是匹配监控粒度与业务节奏。

  • 按行数切(模拟访问量):建议每 5 分钟跑一次脚本,配合 wc -l 增量统计(记录上一次行数到临时文件),避免每次全量扫描大日志
  • 按内存切:每 2–5 分钟查一次 free,阈值设 85% 比 95% 更安全,留出缓冲时间
  • 注意 date +%Y%m%d_%H%M%S 在高频场景下可能重复:同一秒内多次执行,会导致 mv 覆盖归档文件,应改用 date +%Y%m%d_%H%M%S%3N(纳秒)或加随机后缀
  • 所有条件型切割(大小/内存/行数)都应在脚本开头加锁,比如 if [ -f /tmp/rotate.lock ]; then exit; else touch /tmp/rotate.lock; trap 'rm -f /tmp/rotate.lock' EXIT,防止 cron 任务堆积并发冲突

实际中最容易被忽略的是信号发送后的等待逻辑 —— kill -USR1 返回成功不代表 Nginx 已完成重开日志,如果紧接着就 touch 新文件并 chown,可能因权限滞后导致 worker 进程写入失败。真要稳,得加简单校验,比如轮询 stat -c '%y' /var/log/nginx/access.log 看修改时间是否更新。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3650

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3173

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2233

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5350

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5022

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

2993

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2505

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2719

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习