Obsidian
Mac
在Mac使用终端命令安装DMG
终端无法访问外挂硬盘
小诗词
SSH 无密码登录及 Rsync 同步配置笔记
Cron专题
at 命令笔记
Kostal 服务器密码
Docker 安装指南
MySQL Workbench 数据库迁移:哪些内容不需要迁移?
kostia
配置管理系统(ConfigManager)设计说明
本文档使用 MrDoc 发布
-
+
首页
Cron专题
## 什么是Cron? Cron 是一种基于时间的任务调度工具,广泛用于 Unix-like 系统中,用于自动执行周期性任务。它通过定义特定的时间规则(Cron 表达式)来触发脚本或命令的执行。 ## Cron 的基本组成 - **Crontab 文件**:存储 Cron 任务的配置文件,每个用户可以有自己的 crontab 文件。 - **Cron 守护进程**:后台运行的进程,负责读取 crontab 文件并按计划执行任务。 - **Cron 表达式**:由 5 或 6 个字段组成,用于定义任务的执行时间。 ### Cron 表达式格式 Cron 表达式通常由以下字段组成(以空格分隔): ``` * * * * * <command> | | | | | | | | | +---- 星期(0-7,0或7表示星期日) | | | +------ 月份(1-12) | | +-------- 日期(1-31) | +---------- 小时(0-23) +------------ 分钟(0-59) ``` ## Crontab 命令 - `crontab -e`:编辑当前用户的 crontab 文件。 - `crontab -l`:列出当前用户的 crontab 内容。 - `crontab -r`:删除当前用户的 crontab 文件。 ## 常见用法与示例 以下是多种场景下的 Cron 表达式示例,涵盖不同调度需求: 1. **每日任务**: - `0 0 * * * /path/to/daily_backup.sh` - 每天凌晨 0:00 执行备份脚本。 - `30 6 * * * /path/to/send_daily_report.sh` - 每天早上 6:30 发送日报。 - `0 12 * * * /path/to/check_disk_usage.sh >> /var/log/disk.log 2>&1` - 每天中午 12:00 检查磁盘使用情况并记录日志。 2. **每周任务**: - `0 9 * * 1 /path/to/weekly_report.sh` - 每周一 9:00 执行周报生成脚本。 - `0 0 * * 0 /path/to/clean_temp_files.sh` - 每周日凌晨 0:00 清理临时文件。 - `30 8 * * 1-5 /path/to/send_team_reminder.sh` - 每周一到周五 8:30 发送团队提醒。 3. **每月任务**: - `0 0 1 * * /path/to/monthly_archive.sh` - 每月 1 日凌晨 0:00 执行归档脚本。 - `0 10 15 * * /path/to/generate_invoice.sh` - 每月 15 日 10:00 生成发票。 - `0 0 1 1,7 * /path/to/biannual_audit.sh` - 每年 1 月和 7 月 1 日凌晨 0:00 执行半年审计。 4. **高频任务**: - `*/5 * * * * /path/to/check_server_status.sh` - 每 5 分钟检查服务器状态。 - `0 */2 * * * /path/to/sync_data.sh` - 每 2 小时执行数据同步。 - `*/30 * * * * /path/to/monitor_network.sh >> /var/log/network.log 2>&1` - 每 30 分钟监控网络并记录日志。 5. **特定时间范围**: - `0 8-18 * * * /path/to/check_updates.sh` - 每天 8:00 到 18:00 每小时检查更新。 - `0 9,12,15 * * * /path/to/run_tests.sh` - 每天 9:00、12:00 和 15:00 运行测试脚本。 - `0 0 1-7 * * /path/to/weekly_summary.sh` - 每月前 7 天凌晨 0:00 生成周总结。 6. **复杂调度**: - `0 0 * * 1,3,5 /path/to/run_on_mon_wed_fri.sh` - 每周一、三、五凌晨 0:00 执行脚本。 - `0 0 1,15 * * /path/to/bimonthly_task.sh` - 每月 1 日和 15 日凌晨 0:00 执行任务。 - `*/10 9-17 * * 1-5 /path/to/check_queue.sh` - 工作日 9:00 到 17:00,每 10 分钟检查队列状态。 7. **特殊场景**: - `@reboot /path/to/start_service.sh` - 系统启动时执行服务启动脚本。 - `0 0 * * * [ $(date +\%d) -eq 1 ] && /path/to/monthly_task.sh` - 仅在每月 1 日凌晨 0:00 执行(使用条件判断)。 - `0 3 * * 6 /path/to/weekend_maintenance.sh` - 每周六凌晨 3:00 执行维护任务。 ## 注意事项 - **权限问题**:确保 Cron 执行的命令或脚本具有可执行权限。 - **环境变量**:Cron 的运行环境与用户登录环境不同,可能需要显式设置 PATH 或其他变量。例如: ``` 0 0 * * * PATH=/usr/local/bin:/usr/bin:/bin /path/to/script.sh ``` - **日志记录**:建议将输出重定向到日志文件,便于调试。例如: ``` 0 0 * * * /path/to/script.sh >> /var/log/script.log 2>&1 ``` - **时间精度**:Cron 的最小调度单位是分钟,无法实现秒级调度。 - **任务重叠**:确保任务执行时间不会过长,避免与下一次调度冲突。 ## 扩展工具 - **Anacron**:适合非 24/7 运行的系统,处理未执行的定时任务。 - **Quartz Scheduler**:更复杂的任务调度框架,适合企业级应用。 ## 调试与测试 - 使用 `crontab -l` 检查任务是否正确配置。 - 临时调整时间间隔(如改为每分钟执行)以验证脚本行为。 - 查看系统日志(通常在 `/var/log/cron` 或 `/var/log/syslog`)以排查问题。
admin
2025年4月22日 15:18
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码