最近开发时遇到例行繁琐的事务,解决以后便写下这篇文章跟大家分享,请大家不吝指教!阅读本篇文章,你将学到:
- crontab 的基本概念与用途
- 如何设定与管理排程任务
- 实用的时间格式与特殊符号
- 实务应用情境与范例
- 提升工作效率的实用技巧
什么是 Crontab?
Crontab(cron table)是 Unix/Linux 系统中的排程工具,用于安排定期执行的任务。系统会透过 cron 守护进程(daemon)定期检查并执行设定的任务。
基本指令
查看现有排程
crontab -l
编辑排程(会进入文档编辑器模式,可能是 vi, vim, nano)
crontab -e
基本范例
# 每天早上 8:30 执行
30 8 * * * /path/to/script.sh
# 每周一至周五下午 6 点执行
0 18 * * 1-5 /path/to/script.sh
# 每两小时执行一次
0 */2 * * * /path/to/script.sh
时间格式说明
基本格式
范例 | 30 | 8 | * | * | 1-5 | /path/to/script.sh |
说明 | 第30分 | 早上8点 | 每日 | 每月 | 周一到周五 | 要执行的指令 |
时间范围表
分钟 | 0-59 | 每小时的第几分钟 |
小时 | 0-23 | 24小时制 |
日期 | 1-31 | 每月的第几天 |
月份 | 1-12 | 一年中的第几月 |
星期 | 0-7 | 0和7都代表星期日 |
特殊符号说明
* | 星号 | 代表任何时间 | * * * * * 每分钟执行 |
, | 逗号 | 代表多个时间点 | 0,15,30,45 * * * * 每15分钟执行 |
- | 减号 | 代表时间范围 | 0 9-17 * * * 朝九晚五每小时执行 |
/ | 斜线 | 代表执行间隔 | */15 * * * * 每15分钟执行 |
@yearly | 年度 | 每年执行一次 | @yearly /script.sh |
@monthly | 月份 | 每月执行一次 | @monthly /script.sh |
@weekly | 周期 | 每周执行一次 | @weekly /script.sh |
@daily | 日期 | 每天执行一次 | @daily /script.sh |
@hourly | 小时 | 每小时执行一次 | @hourly /script.sh |
@reboot | 重启 | 系统重启时执行 | @reboot /script.sh |
实务应用范例
情境说明:自动化帐单处理系统
身为一位系统管理者,您可能遇到这样的需求:
- 每天需要从 AWS 下载昨日的帐单资料
- 将下载的资料写入资料库做分析
- 每月初要产生完整的月度报表
- 过程中需要记录执行状况,方便除错
如果手动处理,您需要:
使用 crontab 自动化后,这些工作都能自动完成!
完整的排程设定范例
# ====================================
# AWS 帐单自动化处理系统
# 功能:自动下载、处理、汇入每日帐单
# 更新:2024-01-01
# ====================================
# 环境变数设定
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 专案路径设定
SCRIPT_PATH=/to/your/path
LOG_PATH=/var/log/billing
# === 每日任务 ===
# 早上 8:30 从 AWS 下载昨日帐单
30 8 * * * python3 $SCRIPT_PATH/aws_bill_download.py --daily --date=$(date -d "yesterday" +\\%Y-\\%m-\\%d) >> $LOG_PATH/download.log 2>&1
# 早上 9:00 处理并汇入资料库
0 9 * * * python3 $SCRIPT_PATH/process_daily_bill.py >> $LOG_PATH/process.log 2>&1
# === 每月任务 ===
# 每月 4 号早上 8:00 下载上个月完整帐单
0 8 4 * * python3 $SCRIPT_PATH/aws_bill_download.py --monthly --month=$(date -d "last month" +\\%Y-\\%m) >> $LOG_PATH/monthly.log 2>&1
# 每月 4 号早上 8:30 产生月度报表
30 8 4 * * python3 $SCRIPT_PATH/generate_monthly_report.py >> $LOG_PATH/report.log 2>&1
# === 资料备份 ===
# 每天午夜 12:00 备份资料库
0 0 * * * $SCRIPT_PATH/backup_database.sh >> $LOG_PATH/backup.log 2>&1
设定说明
环境变数
- 设定基本的系统环境
- 确保所有命令都能被正确找到
路径管理
- 使用变数管理脚本和日誌路径
- 方便后续维护与修改
任务分类
- 每日任务:处理日常帐单
- 月度任务:处理月报表
- 备份任务:确保资料安全
日誌记录
- 每个任务都有独立的日誌
- 使用 2>&1 同时记录标準输出和错误
- 方便追踪除错
实用小技巧
日期处理
# 取得昨天日期
$(date -d "yesterday" +\\%Y-\\%m-\\%d)
# 取得上个月
$(date -d "last month" +\\%Y-\\%m)
错误处理
# 记录完整执行资讯
command >> logfile.log 2>&1
注解说明
- 使用 === 分隔不同区块
- 标注更新时间
- 说明主要功能
透过这样的设定,您可以:
- 完全自动化日常工作
- 有系统地管理各项任务
- 方便地追踪执行状况
- 轻鬆维护和更新设定
这就是 crontab 在实务上的强大应用!