Linux 定时任务(Cron)完整教程

Linux 定时任务(Cron)完整教程

一、什么是 Cron?

Cron 是 Linux/Unix 系统的定时任务调度器。它按照你设定的时间规则,自动、周期性地执行命令或脚本,无需人工干预。


二、Crontab 时间格式(5个星号)

每个定时任务一行,格式如下:

复制代码
┌───────────── 分钟 (0-59)
│ ┌───────────── 小时 (0-23)
│ │ ┌───────────── 日期 (1-31)
│ │ │ ┌───────────── 月份 (1-12)
│ │ │ │ ┌───────────── 星期 (0-7, 0和7都表示周日)
│ │ │ │ │
* * * * *  要执行的命令

常用特殊符号

符号 含义 示例
* 任意值 * * * * * 每分钟执行
, 列表 1,15 表示1日和15日
- 范围 1-5 表示周一到周五
/ 间隔 */5 表示每5分钟
# 注释 行首加 # 表示注释掉

三、用 Nano 编辑 Crontab 的完整步骤

步骤 1:打开当前用户的定时任务表

复制代码
crontab -e

第一次执行时会提示选择编辑器,输入 1 选择 nano(如果没有提示,系统默认可能就是 nano)。

步骤 2:在 Nano 中编写任务

进入 nano 后,你会看到一个空白或已有内容的文件。直接输入你的定时任务(实战过的案例):

复制代码
# 每月 1 日、15 日导出 7 张资源表
0 2 1,15 * * /home/yyh/code/searchAssocia/wordlib/scripts/run_resource_export.sh
​
# 每天导出前 30 天 SearchRequest 聚合
0 3 * * * /home/yyh/code/searchAssocia/wordlib/scripts/run_daily_sensor_export.sh
​
# 每天构建、审核、发布词库到 MySQL
20 3 * * * /home/yyh/code/searchAssocia/wordlib/scripts/run_daily_word_lib_cron.sh
​
# 每天构建 BGE-M3 相似词向量库与本地快照
0 4 * * * /home/yyh/code/searchAssocia/wordlib/scripts/run_daily_similarity_cron.sh

步骤 3:保存并退出 Nano

操作 快捷键
保存文件 Ctrl + O(然后按 Enter 确认)
退出 nano Ctrl + X

如果修改后按 Ctrl + X,nano 会询问是否保存,按 Y 确认,再按 Enter 即可。

步骤 4:验证任务是否写入成功

复制代码
crontab -l

这会列出当前用户的所有定时任务,检查你刚写的内容是否正确。


四、逐条解析你的案例

任务 时间表达式 含义
导出资源表 0 2 1,15 * * 每月1日和15日,凌晨2:00 执行
导出 SearchRequest 0 3 * * * 每天凌晨3:00 执行
构建词库 20 3 * * * 每天凌晨3:20 执行
构建向量库 0 4 * * * 每天凌晨4:00 执行

时间编排的巧妙之处

注意这四个任务的时间安排:

  • 2:003:003:204:00

彼此间隔至少20分钟,这是良好的实践:

  1. 避免多个脚本同时运行争抢资源

  2. 如果前一个脚本依赖某些数据,后一个可以等它完成

  3. 凌晨是服务器负载最低的时间段


五、Crontab 常用命令速查

复制代码
crontab -e      # 编辑当前用户的定时任务
crontab -l      # 列出当前用户的定时任务
crontab -r      # 删除当前用户的所有定时任务(慎用!)

六、重要注意事项

1. 脚本必须有执行权限

复制代码
chmod +x /home/yyh/code/searchAssocia/wordlib/scripts/run_resource_export.sh

2. 建议使用绝对路径

Cron 的执行环境变量和用户登录后的环境不同,务必使用绝对路径

  • /home/yyh/code/.../script.sh

  • ~/code/.../script.sh./script.sh

3. 脚本中涉及的环境变量

如果脚本依赖特定的环境变量(如 PATHJAVA_HOME 等),建议在脚本开头显式设置,或在 crontab 顶部声明:

复制代码
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
HOME=/home/yyh
​
0 2 1,15 * * /home/yyh/.../run_resource_export.sh

4. 输出重定向(排查问题必备)

建议将脚本的输出和错误写入日志文件,方便排查:

复制代码
0 2 1,15 * * /home/yyh/.../run_resource_export.sh >> /home/yyh/logs/resource_export.log 2>&1
  • >> 表示追加输出到日志

  • 2>&1 表示把错误输出(stderr)也合并到标准输出(stdout)

5. 测试脚本能否独立运行

在写入 crontab 之前,先手动执行一次脚本,确保它本身没问题:

复制代码
/home/yyh/code/searchAssocia/wordlib/scripts/run_resource_export.sh

七、快速参考:常见时间规则

需求 表达式
每分钟 * * * * *
每5分钟 */5 * * * *
每小时整点 0 * * * *
每天凌晨2点 0 2 * * *
每周一早上8点 0 8 * * 1
每月1号凌晨3点 0 3 1 * *
每月1号和15号 0 0 1,15 * *
工作日(周一到周五)早上9点 0 9 * * 1-5
每2小时 0 */2 * * *

八、总结流程图

复制代码
1. 写好并测试脚本 ──→ 2. chmod +x 给执行权限
↓
3. crontab -e 打开编辑器 ──→ 4. 用 nano 写入任务
↓
5. Ctrl+O 保存 ──→ 6. Ctrl+X 退出 ──→ 7. crontab -l 验证
相关推荐
小周学学学1 小时前
vmware-horizon第一章:horizon服务器安装
运维·服务器·vmware
小雪崩2 小时前
嵌入式学习 day25:哈希表及排序与查找
linux·c语言·数据结构·学习·排序算法
gsls2008082 小时前
Penpot Docker 部署与 MCP 服务配置文档
运维·docker·容器·原型·penpot
九硕智慧建筑一体化厂家2 小时前
直流智能照明|全场景节能升级!打造安全低碳的智慧建筑光环境
运维·笔记·安全·智慧城市
蓝速科技2 小时前
蓝速科技丨数智人终端选型指南:后台运维如何决定长期运营成本
运维·科技
奇树谦2 小时前
HDD 为什么适合顺序大文件读写:从 RAID 5 到 RAID 50 的原理与性能分析
linux·运维·网络
hi_ro_a3 小时前
Linux基础开发工具详解
linux·运维·服务器
嵌入式阿蔡3 小时前
Linux_01:交叉编译与开发环境实战——从单片机跨到 Linux 的第一道坎
linux·运维·网络·单片机·嵌入式硬件·嵌入式实时数据库
风静如云3 小时前
Openssl:Win11(Chrome)安装客户端证书
服务器