当前位置: 首页 > news >正文

crontab 定时任务从入门到上线(语法 + 排障)


1. 这篇文章你能学到什么

  • crontab 是什么、解决什么问题
  • 常用命令:查看/编辑/生效
  • 5 段式时间表达式如何读
  • 常见符号:*,-/
  • 定时任务为什么“不执行”的排障清单

目录

  • 先理解 crontab 的命令和时间表达式
  • 再学会写“脚本 + 日志”的上线风格任务
  • 最后掌握定时任务不执行时的排障顺序

2. crontab 常用命令

  • 查看当前用户的定时任务:
crontab-l
  • 编辑定时任务:
crontab-e

3. 时间表达式(必背)

典型格式(5 段):

分钟 小时 日 月 星期 command

示例:每天凌晨 2 点执行:

0 2 * * * /path/to/script.sh

4. 常用符号解释

  • *:所有可能值

    • 如 month 为*表示每月
  • ,:列举

    • 1,2,5,7,8,9
  • -:范围

    • 2-6表示 2 到 6
  • /:步长

    • 0-23/2表示每两小时
    • */10(minute 字段)表示每十分钟

5. 建议写法:脚本 + 日志(上线必做)

你写 crontab 时尽量做到:

  • 用绝对路径
  • 把 stdout/stderr 重定向到日志文件

示例:

*/5 * * * * /opt/app/job.sh >> /var/log/job.log 2>&1

你可以把一条定时任务理解成这样一条完整路径:

  1. 先写好脚本/opt/app/job.sh
  2. 给脚本执行权限chmod +x /opt/app/job.sh
  3. 手动执行一次脚本,确保脚本本身没问题
  4. 再写入crontab -e
  5. 最后用日志确认任务是否真正执行

6. 定时任务不执行:排障清单

  • 看任务有没有写进去crontab -l
  • 脚本有没有执行权限chmod +x job.sh
  • 路径是否写绝对路径:crontab 环境变量少,不能依赖相对路径
  • 环境变量是否缺失
    • 建议脚本里显式写JAVA_HOME或使用绝对路径java
  • 日志有没有输出
    • >> /var/log/job.log 2>&1
  • 脚本首行 shebang
    • #!/bin/bash
  • 时间是否写错(时区)
    • 服务器时区/系统时间是否正确

7. 一个实用示例:定时清理日志

0 3 * * * /usr/bin/find /opt/tomcat/logs -name "*.log" -mtime +7 -delete >> /var/log/clean.log 2>&1

说明:每天 3 点清理 7 天前的日志。


8. 下一步建议

  • 进程守护:systemd(让服务崩了能自动拉起)
  • 日志滚动:logrotate(避免日志无限增长撑爆磁盘)
  • 监控:CPU/内存/磁盘/端口存活

9. 小结

crontab 最容易出问题的地方,不是语法本身,而是运行环境和日志意识:

  • 路径要写绝对路径
  • 脚本要有执行权限
  • 环境变量不要想当然继承
  • 任务一定要落日志

只要你养成“先手动执行脚本,再配置定时任务,最后看日志确认”的习惯,crontab 的大部分坑你都能避开。

http://www.jsqmd.com/news/484058/

相关文章:

  • 基于RRT的路径规划算法在多种移动设备上的实现
  • 探索MATLAB中多个无人船协同围捕控制算法
  • 探索 BP 神经网络 PID 控制在 Simulink 中的仿真之旅
  • JavaScript性能优化实战烂文
  • 贾子认知理论与全球主流AI大模型十四项核心弊端:诊断与根治方案
  • Linux 安装 MySQL 与远程连接排障(yum 方案)
  • Scholar-Agent:你的全自动文献调研工具
  • VF控制的仿真与代码生成
  • 拒绝Python依赖!SpringBoot 3 + ONNX Runtime 打造纯Java版YOLOv8通用检测服务:从模型转换到高并发API封装的全链路实战
  • 虚拟机-持续部署流水线最简工具yunedit-ssh
  • 深度解析:安卓开发工程师进阶之路——聚焦鸿蒙、KMP与架构优化
  • 基于动态窗口法(DWA)的路径规划算法实现
  • 【底层心法】彻底抛弃虚拟串口!撕开 USB 协议栈黑盒,用 Custom HID 打造 1000Hz 零延迟的桌面智能外设
  • 深耕移动技术,助力民航数字化:解析高要求 Android 开发工程师的角色与能力
  • 双极性SPWM控制单相全桥逆变电路仿真探索:电压电流双闭环控制
  • 第 178 场双周赛Q1:101014. 找到第一个唯一偶数
  • 测了一整天 Nano Banana 2,整理了 20 个实际能用的场景(附免费入口)
  • 探索风储调频:三机九节点模型中的储能奥秘
  • 【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean)
  • 基于双层优化的电动汽车优化调度研究:探索电力系统新视角
  • 【技术分享】抖音聚合采集软件使用教程(附代码示例)
  • SourceTree 推送后修改commit message
  • 2026年10款热门降AI率工具全测评,轻松搞定论文降AI难题(持续更新)
  • YOLO26改进92:全网首发--c3k2模块添加EBlock模块:新型注意力机制增强高效卷积神经网络的感受野
  • SpringBoot 3.x 升级“鬼故事”:Controller 参数突然变 null?别慌,这不是 Bug,是 JDK 17 的“阳谋”!
  • 算法入门(一):什么是算法?
  • 从零到一:我设计了一个抗量子计算的哈希函数 REV-512
  • Linux命令速查指南
  • 鸿蒙开发工程师在金融科技领域的深度解析与实践指南
  • 交互式图表革新 AI 学习体验 ChatGPT 与 Claude 开启可视化教育新时代