一、什么是 Cron?为什么需要它?
Cron 是什么?
Cron 是 Linux 和 Unix 系统中用于定时执行任务的程序,就像你的智能闹钟一样:
- 自动运行:系统启动后自动运行,无需人工干预
- 定时检查:每分钟检查一次是否有任务要执行
- 自动执行:在预设时间自动执行命令或脚本
- 灵活配置:支持系统级和用户级任务调度
Cron 能做什么?
想象以下场景,都可以交给 Cron 来完成:
| 应用场景 | 具体任务 | 使用频率 |
|---|---|---|
| 数据备份 | 每天凌晨自动备份数据库 | 每天一次 |
| 日志管理 | 每周清理过期日志文件 | 每周一次 |
| 系统监控 | 每小时检查服务是否正常运行 | 每小时一次 |
| 报告生成 | 每月生成业务报表 | 每月一次 |
| 定时通知 | 工作日发送提醒邮件 | 工作日每天 |
为什么需要 Cron?
- 自动化:替代人工执行重复性任务,节省时间和精力
- 准确性:精确到分钟级执行,不会遗漏或延迟
- 无人值守:即使你不在电脑前,任务也能按时执行
- 可靠性:系统级服务,稳定可靠
二、Cron 的工作原理
Cron 的组成部分
- Cron 守护进程(crond):后台持续运行的程序,负责定时检查和执行任务
- Crontab 文件:存储定时任务配置的文件
- Cron 表达式:定义执行时间的语法规则
Crontab 文件的位置
Cron 支持两种级别的任务配置:
| 级别 | 配置方式 | 文件位置 | 特点 |
|---|---|---|---|
| 用户级 | crontab -e | /var/spool/cron/用户名 | 每个用户独立配置,以用户身份执行 |
| 系统级 | 编辑 /etc/crontab | /etc/crontab | 管理员配置,需要指定执行用户 |
Cron 的工作流程
1 | 1. Cron 守护进程启动 |
三、Cron 表达式详解
基本格式
Cron 表达式由 5 个时间字段 和 1 个命令字段 组成:
1 | * * * * * command |
字段取值范围
| 字段 | 取值范围 | 说明 |
|---|---|---|
| 分钟 | 0-59 | 每小时的第几分钟 |
| 小时 | 0-23 | 每天的第几小时(24小时制) |
| 日期 | 1-31 | 每月的第几天 |
| 月份 | 1-12 或 jan-dec | 月份 |
| 星期 | 0-7 或 sun-sat | 0 和 7 都表示周日 |
特殊符号用法
Cron 支持多种特殊符号来表达复杂的时间规则:
1. 星号 * - “每”
表示匹配该字段的所有值:
1 | * * * * * command # 每分钟执行 |
2. 逗号 , - “或”
表示在多个时间点执行:
1 | 0 8,12,18 * * * command # 每天8点、12点、18点执行 |
3. 中杠 - - “到”
表示连续时间段:
1 | 0 9-18 * * * command # 每天9点到18点,每小时执行 |
4. 斜杠 / - “间隔”
表示固定间隔执行:
1 | */5 * * * * command # 每5分钟执行一次 |
5. 组合使用
可以组合多种符号实现复杂规则:
1 | 0 9-17 * * 1-5 command # 周一到周五,9点到17点每小时执行 |
日期和星期的关系
重要规则:当日期和星期都指定时,满足任意一个条件就会执行。
1 | # 这个会在每月1-5号执行,也会在每周一到周五执行 |
四、常用命令实战
基础命令
| 命令 | 说明 | 示例 |
|---|---|---|
crontab -l | 查看当前用户的定时任务 | crontab -l |
crontab -e | 编辑当前用户的定时任务 | crontab -e |
crontab -r | 删除当前用户的所有任务(危险!) | crontab -r |
crontab -ri | 交互式删除(推荐) | crontab -ri |
crontab -u user -e | 编辑指定用户的任务(需root) | sudo crontab -u nginx -e |
编辑任务示例
- 运行
crontab -e进入编辑模式(首次编辑需选择编辑器,推荐 vim) - 按
i进入插入模式 - 输入任务配置
- 按
ESC退出插入模式 - 输入
:wq保存退出
五、实用示例
基础示例
1 | # 每分钟执行 |
特殊关键字(简化写法)
Cron 提供了一些关键字来简化常用的时间配置:
| 关键字 | 等价表达式 | 说明 |
|---|---|---|
@reboot | - | 系统重启后执行一次 |
@yearly | 0 0 1 1 * | 每年1月1日0点 |
@monthly | 0 0 1 * * | 每月1日0点 |
@weekly | 0 0 * * 0 | 每周日0点 |
@daily | 0 0 * * * | 每天0点 |
@hourly | 0 * * * * | 每小时0分 |
1 | @daily /path/to/daily_backup.sh # 每天0点执行备份 |
系统级任务示例
系统级 crontab(/etc/crontab)需要额外指定执行用户:
1 | # 格式:分 时 日 月 周 用户 命令 |
六、使用面板管理定时脚本
青龙面板是一款可视化的定时任务管理平台,支持 Python3、JavaScript、Shell 等多种脚本语言,让定时任务管理变得简单直观。
相比于传统的 Cron 命令行配置,青龙面板具有以下优势:
| 特性 | 传统 Cron | 青龙面板 |
|---|---|---|
| 配置方式 | 命令行编辑 | 可视化 Web 界面 |
| 任务管理 | 文本文件 | 图形化列表 |
| 日志查看 | 命令行查看 | 实时日志面板 |
| 错误告警 | 无内置机制 | 多种通知方式 |
| 权限管理 | 系统用户权限 | 精细化角色权限 |
| 脚本管理 | 分散存储 | 集中管理 |
青龙面板的核心功能
- 多语言脚本支持:Python3、JavaScript、Shell
- 可视化任务配置:图形化界面管理定时任务
- 秒级任务调度:支持精确到秒的定时任务
- 在线脚本管理:上传、编辑、删除脚本文件
- 环境变量管理:统一管理脚本所需的环境变量
- 实时日志监控:查看任务执行日志
- 系统通知:支持多种通知方式(微信、Telegram、钉钉等)
- 暗黑模式:支持亮色/暗色主题切换
- 移动端适配:支持手机端访问管理
安装青龙面板(Docker 方式)
环境准备
确保已安装 Docker 和 Docker Compose:
1 | # 安装 Docker(以 Ubuntu 为例) |
安装命令
1 | # 创建青龙面板目录 |
访问面板
- 打开浏览器访问:
http://服务器IP:5700 - 首次访问会提示初始化配置
- 创建管理员账号和密码
- 登录后即可开始使用
青龙面板使用教程
1. 创建第一个任务
登录青龙面板后,点击左侧菜单栏的定时任务 → 新建任务:
1 | # 示例:Python 脚本 - 定时输出当前时间 |
2. 设置定时规则
青龙面板支持标准 Cron 表达式,格式为:
1 | 分 时 日 月 周 |
常用示例:
| Cron 表达式 | 含义 |
|---|---|
*/5 * * * * | 每5分钟执行一次 |
0 2 * * * | 每天凌晨2点执行 |
0 9,18 * * * | 每天9点和18点执行 |
0 9-17 * * 1-5 | 工作日9点到17点每小时执行 |
0 0 1 * * | 每月1号凌晨执行 |
3. 查看任务日志
点击任务列表右侧的日志按钮,即可查看任务执行日志:
1 | # 日志示例 |
4. 订阅管理(拉取仓库脚本)
脚本订阅是青龙面板的核心功能之一,能够自动从 GitHub/GitCode 等代码仓库同步脚本,并创建定时任务。
订阅配置详细步骤
进入订阅管理界面
- 点击左侧菜单栏的订阅管理
- 点击右上角添加订阅按钮
填写订阅信息
字段 说明 示例 类型 选择仓库类型 公开仓库 仓库地址 Git 仓库 URL https://github.com/your/repo.git订阅名称 自定义名称 huajiScript 定时规则 Cron 表达式 0 0 0 * * *(每天凌晨更新)高级筛选设置
- 分支:留空使用默认主分支
- 白名单:只拉取包含这些关键词的脚本
- 黑名单:排除包含这些关键词的脚本
- 文件后缀:指定拉取的文件类型(如
.py、.js)
订阅命令格式
1
2
3
4
5# 完整格式
ql repo <仓库URL> <白名单> <黑名单> <依赖文件> <分支> <文件后缀>
# 示例:订阅京东脚本仓库
ql repo https://github.com/shufflewzc/faker4.git "jd_|jx_|gua_" "activity|backUp" "^jd[^_]|USER" "main" "js py"订阅工作原理
1
2
3
4
5
6
7
8
9
10
11
12
13┌─────────────┐ 定时触发 ┌─────────────┐ 自动同步 ┌─────────────┐
│ 定时任务 │ ──────────>│ 订阅系统 │ ──────────>│ 脚本仓库 │
└─────────────┘ └──────┬──────┘ └─────────────┘
│
▼
┌─────────────┐
│ 任务调度器 │
└──────┬──────┘
│
▼
┌─────────────┐
│ 结果记录器 │
└─────────────┘
5. 环境变量配置
环境变量用于存储敏感信息(如 API 密钥、Cookie 等),避免将敏感信息明文写入脚本。
添加环境变量步骤
进入环境变量界面
- 点击左侧菜单栏的环境变量
- 点击右上角新建变量按钮
配置环境变量
字段 说明 示例 名称 变量名(大写) JD_COOKIE 值 变量内容 pt_key=xxx;pt_pin=xxx;备注 描述信息 京东账号 Cookie 是否启用 是否生效 启用 多账号配置示例
1
2
3
4
5
6
7
8# 单个账号
export JD_COOKIE="pt_key=xxx;pt_pin=xxx;"
# 多个账号(JSON 数组格式)
export JD_COOKIE='[
{"cookie": "pt_key=账号1;pt_pin=账号1;"},
{"cookie": "pt_key=账号2;pt_pin=账号2;"}
]'在脚本中使用环境变量
1
2
3
4# Python 示例
import os
cookie = os.environ.get('JD_COOKIE')
print(f"Cookie: {cookie}")1
2
3// JavaScript 示例
const cookie = process.env.JD_COOKIE;
console.log(`Cookie: ${cookie}`);
6. 环境配置
青龙面板支持配置 Python、Node.js 等运行环境,安装脚本所需的依赖包。
依赖管理
进入依赖管理界面
- 点击左侧菜单栏的依赖管理
安装依赖
- Node.js 依赖:在输入框输入包名,点击安装
- Python 依赖:输入 pip 包名,点击安装
- Linux 依赖:输入系统包名,点击安装
常用依赖列表
1
2
3
4
5
6
7
8# Node.js 常用依赖
request crypto-js prettytable dotenv jsdom date-fns
# Python 常用依赖
requests beautifulsoup4 lxml aiohttp PyExecJS
# Linux 常用依赖
gcc g++ python3-dev libffi-dev openssl-dev批量安装依赖
- 勾选多个依赖包
- 点击批量安装按钮
- 勾选自动拆分可自动处理多个包名
系统设置
基础设置
- API 地址:设置面板访问地址
- 通知设置:配置 Telegram、钉钉、微信等通知渠道
- 安全设置:启用登录验证、设置 IP 白名单
配置文件管理
- 编辑
config.sh配置订阅默认参数 - 配置
notify.py设置通知模板
- 编辑
内置命令
青龙面板提供了一些内置命令,可在容器中执行:
1 | # 更新青龙面板 |
实际应用场景
场景1:定时数据备份
1 |
|
场景2:定时发送通知
1 | import requests |