cron · 定时闹钟

上游:nano(用 nano 编辑定时任务表)· shell-script(cron 运行的是脚本) 下游:(Tier 4 终点,后续扩展见 Tier 5) 参见:systemctl(开机自启用 systemctl,定时任务用 cron)


一句话是什么

cron 让 Linux 在指定时间自动运行命令—— 就像设了一个永远不会忘的闹钟,时间到了就自动做某件事。


为什么需要它

Minecraft 存档需要每天备份,但你不可能每天手动跑 backup.sh。 cron 让这件事自动发生:

每天凌晨 3 点自动备份存档
每周日自动清理 7 天以上的旧备份
每小时检查服务器是否还在运行

设好就不用管了,cron 帮你记着。


核心用法

编辑定时任务表

crontab -e    # 编辑当前用户的定时任务(会打开 nano)
crontab -l    # 查看当前所有定时任务
crontab -r    # 删除所有定时任务(危险!)

cron 时间格式(5个字段)

分钟  小时  日期  月份  星期  命令
 *     *    *     *     *    命令

每个字段含义:
  分钟:0-59
  小时:0-23
  日期:1-31
  月份:1-12
  星期:0-7(0和7都是周日)
  *   := 每个

常用时间写法

时间含义cron 写法
每分钟* * * * *
每小时整点0 * * * *
每天凌晨 3 点0 3 * * *
每周日凌晨 2 点0 2 * * 0
每月 1 号中午 12 点0 12 1 * *
每 5 分钟*/5 * * * *

记忆口诀

分 时 日 月 周
分钟跑最快,排最前面

Linux 笑话

有个程序员设置 cron 任务时,想每分钟运行一次:

* * * * * /home/aaron/cleanup.sh

然后第二天早上发现系统日志写满了硬盘—— cleanup.sh 里有个 bug,每次运行都会产生 10MB 日志。

一晚上运行了 480 次,产生了 4.8GB 日志文件。

教训:cron 任务上线前,先手动运行脚本确认没有 bug, 再设置定时任务,并且加上日志限制。


例题精讲

📗 初探 Starter — 设置第一个定时任务

# 第一步:打开定时任务编辑器
crontab -e
# 第一次运行可能会让你选编辑器,选 nano(输入对应数字)
 
# 添加一行(每天下午 5 点提醒写作业):
0 17 * * * echo "Aaron,该写作业了!" >> ~/提醒.txt
 
# 保存退出(Ctrl+O → Enter → Ctrl+X)
 
# 第二步:确认设置成功
crontab -l
# 0 17 * * * echo "Aaron,该写作业了!" >> ~/提醒.txt
 
# 等到下午 5 点,检查文件
cat ~/提醒.txt

📘 应用 User — 每天自动备份 Minecraft 存档

# 前提:backup.sh 已经写好并测试过
ls -la ~/mc-server/backup.sh
# -rwxr-xr-x ...  backup.sh  ← 确认有执行权限
 
# 打开 crontab
crontab -e
 
# 添加每天凌晨 3 点备份:
0 3 * * * /home/aaron/mc-server/backup.sh >> /home/aaron/mc-server/backup.log 2>&1
 
# 解释最后那段:
# >> backup.log      ← 把输出追加到日志文件
# 2>&1               ← 错误信息也写进日志(不然出错了你不知道)
 
# 验证(第二天早上看日志)
cat ~/mc-server/backup.log

📙 管理 Admin — 完整的自动化运维设置

# 打开 crontab
crontab -e
 
# 完整的 Minecraft 服务器自动维护任务:
# 每天凌晨 3:00 备份存档
0 3 * * * /home/aaron/mc-server/backup.sh >> ~/logs/backup.log 2>&1
 
# 每周日凌晨 4:00 清理 7 天前的备份
0 4 * * 0 find ~/mc-backups -name "*.tar.gz" -mtime +7 -delete
 
# 每小时检查服务器进程是否还活着
0 * * * * ps aux | grep -q "[b]edrock_server" || echo "$(date): 服务器挂了!" >> ~/logs/monitor.log
 
# 查看任务
crontab -l
 
# 查看 cron 运行日志(确认任务有没有执行)
grep CRON /var/log/syslog | tail -20

grep -q "[b]edrock_server" 的技巧

  • -q = 安静模式,不输出,只看退出码
  • [b]edrock_server 中括号让 grep 自己不被 grep 到

官方文档参考

man crontab      # 完整手册
man 5 crontab    # crontab 文件格式说明

cron 格式:分 时 日 月 周 命令;* = 每个;*/N = 每 N 个。建议用 >> log 2>&1 记录输出。 在线生成器:https://crontab.guru(输入时间格式,实时预览含义)


节点链接

上游(cron 运行的是这些写好的东西)

  • nano ← crontab -e 用 nano 编辑
  • shell-script ← cron 最常调用的就是 .sh 脚本

同层(两种自动化方式,各有用途)

  • systemctl ← 开机自启用 systemctl,定时任务用 cron ← 口诀:开机 → systemctl,定时 → cron

实战组合


节点版本:v1.0 · 2026-04-20 Tier 4 终点节点——学完这个,Linux 基础自动化全部打通