Linux - 9 定时任务篇(crontab)

news/2025/11/7 16:01:13/文章来源:https://www.cnblogs.com/tangge/p/19199970

1)crontab 定时执行任务

crontab 是 Linux 中用于定时执行任务的核心工具,依托 cron 守护进程运行(cron 是系统级后台服务,默认随系统启动),支持按分钟、小时、日、月、周设定周期性任务,适用于日志切割、数据备份、定时脚本执行等场景。以下从基础用法、语法格式、实战示例、常见问题等方面详细介绍:

一、先确认 cron 服务是否运行

crontab 依赖 cron 进程,先确保服务已启动(否则定时任务不生效):

# 查看 cron 服务状态(CentOS 7+/Ubuntu 16.04+)
sudo systemctl status crond  # CentOS/RHEL
# 或
sudo systemctl status cron   # Ubuntu/Debian# 若未启动,启动并设置开机自启
sudo systemctl start crond && sudo systemctl enable crond  # CentOS
# 或
sudo systemctl start cron && sudo systemctl enable cron     # Ubuntu

重新启动

sudo systemctl restart crond  # CentOS/RHEL

二、crontab 核心语法与操作命令

crontab 用于管理当前用户的定时任务(每个用户有独立的 crontab 文件,默认存储在 /var/spool/cron/用户名),核心操作命令如下:

命令 功能说明 示例
crontab -e 编辑当前用户的定时任务(首次编辑会让选择编辑器,推荐 vim crontab -e → 新增/修改任务
crontab -l 列出当前用户的所有定时任务 crontab -l → 查看已配置的任务
crontab -r 删除当前用户的所有定时任务(谨慎使用,不可逆) crontab -r → 清空所有任务
crontab -u 用户名 -l 查看指定用户的定时任务(需 root 权限) sudo crontab -u root -l → 查看 root 的任务
crontab -u 用户名 -e 编辑指定用户的定时任务(需 root 权限) sudo crontab -u root -e → 编辑 root 的任务
crontab -i 删除任务前提示确认(避免误删) crontab -ir → 交互式删除所有任务

三、定时任务的语法格式(核心重点)

编辑 crontab 时(crontab -e),每个定时任务占一行,格式严格遵循:

* * * * * 命令/脚本路径  # 五个星号分别对应:分 时 日 月 周

1. 五个时间字段的含义

字段位置 含义 取值范围 特殊符号说明
第 1 位 分钟(Minute) 0-59 *:每分钟;*/5:每 5 分钟;1-5:第 1-5 分钟;0,30:第 0 和 30 分钟
第 2 位 小时(Hour) 0-23 *:每小时;*/2:每 2 小时;8-18:早 8 点到晚 6 点
第 3 位 日(Day) 1-31 *:每天;1,15:每月 1 号和 15 号;1-5:每月前 5 天
第 4 位 月(Month) 1-12 或 Jan-Dec *:每月;3-5:3-5 月;12:12 月
第 5 位 周(Week) 0-7 或 Sun-Sat(0 和 7 均代表周日) *:每周;0:周日;1-5:周一到周五

2. 特殊符号的用法(灵活组合)

符号 作用 示例
* 匹配该字段的所有值(“每”) 第 1 位用 * → 每分钟
/ 表示“每隔多久”(步长) 第 1 位 */10 → 每 10 分钟;第 2 位 */3 → 每 3 小时
- 表示范围 第 1 位 30-45 → 第 30 到 45 分钟;第 2 位 9-17 → 9 点到 17 点
, 表示多个独立值 第 1 位 0,15,30,45 → 每 15 分钟;第 3 位 1,10,20 → 每月 1、10、20 号
? 仅用于“日”和“周”字段,标识“无指定值”(避免日和周冲突) 每月 1 号执行,不管是周几:0 0 1 * ?

3. 语法格式注意事项

  • 五个时间字段必须完整,缺一不可;
  • 命令/脚本必须写绝对路径(避免环境变量问题,如 /usr/bin/ls 而非 ls);
  • 若命令有输出(如 echo "hello"),默认会发送邮件给当前用户,可通过 >> /var/log/xxx.log 2>&1 重定向到日志文件(推荐);
  • 注释行以 # 开头,会被 cron 忽略。

四、实战示例(常用定时任务场景)

以下示例均通过 crontab -e 编辑(普通用户编辑自己的任务,系统级任务建议用 sudo crontab -u root -e):

1. 每 5 分钟执行一次脚本

*/5 * * * * /home/tangge/script/clean_log.sh >> /home/tangge/log/clean_log.log 2>&1
  • 解读:*/5 * * * * → 每 5 分钟;脚本路径用绝对路径;输出重定向到日志文件(2>&1 表示将错误输出也写入日志)。

2. 每天凌晨 2 点执行数据备份

0 2 * * * /usr/bin/tar -zcf /backup/data_$(date +\%Y\%m\%d).tar.gz /home/tangge/data >> /backup/backup.log 2>&1
  • 解读:0 2 * * * → 每天 2 点 0 分;$(date +\%Y\%m\%d) 生成日期(注意 % 前需加 \ 转义,否则 cron 会解析错误);备份文件按日期命名。

3. 每周一上午 10 点执行日志切割

0 10 * * 1 /usr/sbin/logrotate /etc/logrotate.d/nginx >> /var/log/logrotate_nginx.log 2>&1
  • 解读:0 10 * * 1 → 每周一 10 点 0 分;logrotate 是系统日志切割工具,需写绝对路径。

4. 每月 1 号和 15 号下午 3 点 30 分执行脚本

30 15 1,15 * * /home/tangge/script/check_service.sh >> /home/tangge/log/check_service.log 2>&1
  • 解读:30 15 1,15 * * → 分钟 30、小时 15、日 1 和 15、月任意、周任意。

5. 工作日(周一到周五)晚上 8 点执行命令

0 20 * * 1-5 /usr/bin/echo "工作日提醒:检查服务状态" >> /home/tangge/reminder.log 2>&1
  • 解读:0 20 * * 1-5 → 每天 20 点 0 分,周一到周五。

6. 每小时的第 10 分钟执行命令

10 * * * * /usr/bin/df -h >> /home/tangge/log/disk_usage.log 2>&1
  • 解读:10 * * * * → 每个小时的第 10 分钟。

五、系统级定时任务(/etc/crontab)

除了用户级 crontab(每个用户独立),还有系统级定时任务文件 /etc/crontab,格式与用户级略有不同(多了 USER 字段,指定执行任务的用户):

# 编辑系统级 crontab(需 root 权限)
sudo vim /etc/crontab# 示例:每天凌晨 3 点以 root 用户执行系统更新检查
0 3 * * * root /usr/bin/yum check-update >> /var/log/update_check.log 2>&1
  • 特点:全局生效,可指定任意用户执行,适合系统级任务(如日志清理、系统监控)。

此外,/etc/cron.d/ 目录可存放自定义系统级任务文件(格式同 /etc/crontab),/etc/cron.hourly//etc/cron.daily/ 等目录可放入脚本(会按小时/天自动执行,无需写时间字段)。

六、常见问题与排查技巧

1. 定时任务不生效?(高频问题)

  • 检查 cron 服务是否运行:sudo systemctl status crond/cron
  • 命令路径是否为绝对路径:用 which 命令 查找绝对路径(如 which tar/usr/bin/tar);
  • 脚本是否有执行权限:chmod +x /path/script.sh
  • 环境变量问题:cron 的环境变量较少,脚本中建议写全环境变量(如 export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin);
  • 日志重定向:通过日志文件查看错误(如 cat /home/tangge/log/clean_log.log);
  • 日期格式转义:date 命令中的 % 需加 \ 转义(如 date +\%Y\%m\%d)。

2. 如何测试定时任务?

  • * * * * * 临时设置为每分钟执行,快速验证是否生效;
  • 直接执行脚本/命令,确认本身能正常运行(排除脚本自身错误)。

3. 查看 cron 执行日志(排查问题)

  • CentOS/RHEL:grep CROND /var/log/cron → 查看 cron 进程的执行记录;
  • Ubuntu/Debian:grep cron /var/log/syslog → 查看 cron 相关日志;
  • 日志中会显示任务执行时间、用户、命令,若执行失败会有错误提示。

4. 避免任务重叠

若任务执行时间可能超过下次触发时间(如备份大文件),可在脚本中添加“锁文件”逻辑,避免多个进程同时运行:

# 脚本开头添加锁文件判断
LOCK_FILE="/tmp/backup.lock"
if [ -f "$LOCK_FILE" ]; thenecho "任务正在执行,跳过本次" >> /backup/backup.log 2>&1exit 1
fi
touch "$LOCK_FILE"# 脚本核心逻辑(备份操作)
/usr/bin/tar -zcf /backup/data_$(date +\%Y\%m\%d).tar.gz /home/tangge/data# 脚本结束删除锁文件
rm -f "$LOCK_FILE"

七、注意事项

  1. 权限控制:普通用户只能编辑自己的 crontab,无法查看/编辑其他用户的任务(root 除外);
  2. 敏感操作:系统级任务建议用 root 用户执行,避免权限不足;
  3. 资源占用:定时任务(如每 1 分钟执行的脚本)避免占用过多 CPU/内存,影响系统正常运行;
  4. 时区问题:cron 采用系统时区,若需指定其他时区,需修改系统时区(timedatectl set-timezone Asia/Shanghai)。

总结

crontab 的核心价值是 自动化周期性任务,关键掌握:

  • 操作命令:crontab -e(编辑)、crontab -l(查看)、crontab -r(删除);
  • 语法格式:分 时 日 月 周 绝对路径命令/脚本 日志重定向
  • 排查技巧:确认 cron 服务、绝对路径、脚本权限、日志输出。

掌握以上内容,就能应对日志切割、数据备份、定时监控等绝大多数自动化场景!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/958929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细介绍:基于屏幕空间投影面积的剔除(Screen-space Area Culling, SSAC)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Elasticsearch、OpenSearch 与 Easysearch:三代搜索引擎的演化与抉择 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

从 Java 到鸿蒙开发:我的跨平台转型之路

缘起:为何选择鸿蒙 作为一名有着多年 Java 开发经验的程序员,我见证了移动开发的兴衰起伏。从早期的 Java ME 到 Android,再到如今的鸿蒙,技术浪潮不断推进。当华为宣布鸿蒙系统并逐步构建其生态时,我意识到这不仅…

淘宝店铺全量商品接口开发:从分类穿透到增量同步的高效采集方案

一、淘宝店铺商品接口的技术特殊性与开发痛点淘宝店铺商品列表作为商家运营与竞品分析的核心数据,其接口体系具有显著的场景化挑战:需处理多层级分类结构(店铺分类可达 3 级以上)、动态上下架状态(商品状态实时变…

分布式专题——35 Netty的使用和常用组件辨析 - 详解

分布式专题——35 Netty的使用和常用组件辨析 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

米尔SECC方案助力国标充电桩出海

随着全球能源结构向清洁化、智能化加速转型,电动汽车与电网的深度融合已成为关键一环。车辆到电网技术不仅让电动汽车成为移动的储能单元,更赋予了它们参与电网调峰、消纳可再生能源的使命。在这一颠覆性变革中,充电…

Javascrip 之 await fetch()

Javascrip 之 await fetch() await fetch()怎么理解? await fetch() 是 JavaScript 中用于处理网络请求的现代语法。 1. 基础概念 fetch() 函数 是浏览器内置的 API,用于发起 HTTP 请求 返回一个 Promise 对象 替…

P2P CDN Tracker 技术深度解析(四):NAT穿透与Relay中继策略

P2P网络中最大的挑战之一是NAT穿透。本文深入剖析Tracker如何检测NAT类型、协调UDP打洞,以及当打洞失败时如何通过三级Relay体系保障连通性。前情回顾 在第1篇中,我们了解到Tracker负责协调NAT穿透。在第2篇中,我们…

2025年11月油脂提取设备知名品牌与破碎仪厂家介绍

在2025年11月,对于从事油脂提取和样品前处理相关科研及工业应用的从业者来说,选择可靠的品牌和设备供应商至关重要。本文将重点介绍在油脂提取设备及破碎仪领域表现突出的知名品牌——上海万柏生物科技有限公司,并详…

开发笔记|PHP+AJAX前后端交互调试的关键注意事项

由于ajax调试起来非常麻烦,所以我们应该把前后端分开测试,代码如下: 后端代码:(comentbyajax.php)<?php require_once ./dbcon.php; set_time_limit(0); //echo json_encode(array(content=>aaaaaa));exi…

jenkins使用github的项目(springboot)进行构建配置例子

1.将springboot项目上传到github 如何上传参考如下连接 https://www.cnblogs.com/hxlasky/p/19199599 建议在项目的resources目录下创建一个Jenkinsfile文件,方便管理,后面采用pipeline构建时候选择"Pipeline s…

28335中断ID

https://blog.csdn.net/DraemSky/article/details/107016407

2025年耐用的高精度内圆磨床订制厂家权威推荐榜单:比较好的高精度内圆磨床/好的高精度内圆磨床/靠谱的高精度内圆磨床源头厂家精选

在高端制造业持续升级的背景下,高精度内圆磨床作为精密加工的核心装备,其性能稳定性与定制化服务能力直接影响精密零部件的加工质量。行业数据显示,2024年中国高精度磨床市场规模增长率达12%,其中数控内圆磨床在精…

工业主板VS商用主板:五大核心差异,选对才能高效运行

在工业自动化、智能制造、物联网等领域,工业主板作为核心控制单元,承担着数据处理、设备联动、指令传输等关键任务,其稳定性、可靠性和适应性直接决定了整个工业系统的运行效率。与我们日常电脑中使用的商用主板不同…

完整教程:Hadoop面试题及详细答案 110题 (71-85)-- 集群部署与运维

完整教程:Hadoop面试题及详细答案 110题 (71-85)-- 集群部署与运维pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &q…

Codeforces Global Round 30 (div.1 + div.2) A~E 题解

A 题面 给定一个长为 \(n\) 的数组 \(a\) 和一个整数 \(x\),每次操作可以将 \(a\) 中相邻两个数替换为他们之间的某个数,问最后有没有可能剩下的数大小为 \(x\)。 \( 1 \le n \le 100 \\ -10^9 \le a_i \le 10^9 \\ …

2025 年最新推荐!国内胶粘剂源头厂家优质品牌排行榜:聚焦实力厂商,助力企业精准选品水性胶粘剂 / 电子胶粘剂 / 注塑胶粘剂公司推荐

引言 当前新材料产业高速发展,胶粘剂作为工业生产关键配套材料,其质量、性能与供应稳定性,直接决定下游 3C 电子、新能源汽车、医疗器械等行业的生产效率与产品品质。但市场上胶粘剂源头厂家数量繁杂,部分厂商存在…

工业互联网高级计划排程(APS):智能制造时代的生产协同核心引擎

在当今高度复杂且动态变化的制造业环境中,企业对生产效率和资源优化能力的要求不断提升。传统的生产计划方式主要依赖经验判断或基于无限产能假定的物料需求计划(MRP)系统,逐渐难以应对多品种、小批量、短交期的市…

Ubuntu VNC传输文件

发送文件 选择 第五个“口口” 文件夹是桌面 FETCH FILEs TO : 设置接收文件的路径

【IEEE出版|往届均已完成EI检索】第四届地理信息与遥感技术国际学术会议(GIRST 2025)

第四届地理信息与遥感技术国际学术会议(GIRST 2025)将于2025年11月27日至29日在意大利罗马召开,将同步开设线上会场。本次会议旨在汇聚地理信息和遥感领域的专家、研究人员和从业者,交流知识并讨论最新进展。随着技…