跳到主要内容
不要错过新客户专属 20% 折扣优惠! 优惠码: KAVESNET20 已复制 |
Linux

什么是 Cron 任务?如何设置?Linux 计划任务指南

用 cron 在 Linux 上自动备份、清理日志、运行脚本。Crontab 语法、示例与常见坑。

KavesNET 团队 2026年1月15日 3 分钟阅读
Cron 计划任务图片

想要每晚自动备份、每周清理日志、或每 5 分钟做一次健康检查?Cron 是 Linux 的标准工具。本文涵盖 crontab 语法、实用示例与常见坑。

什么是 cron?

Cron 是 Linux 守护进程,按计划时间运行命令。每分钟读 crontab 文件,触发到点的命令。

Crontab 语法

一行 cron:5 个时间字段 + 命令:

* * * * * 命令
│ │ │ │ │
│ │ │ │ └── 星期几 (0-7,0 和 7 = 周日)
│ │ │ └──── 月份 (1-12)
│ │ └────── 一个月中第几天 (1-31)
│ └──────── 小时 (0-23)
└────────── 分钟 (0-59)

实用示例

表达式含义
* * * * *每分钟
*/5 * * * *每 5 分钟
0 * * * *每小时整点
0 3 * * *每天 03:00
0 3 * * 1周一 03:00
0 3 1 * *每月 1 日 03:00
30 2 * * 1-5工作日 02:30
@reboot服务器启动时
@daily每天 00:00
@weekly周日 00:00

测试复杂表达式:crontab.guru

编辑 crontab

crontab -e        # 当前用户
sudo crontab -e   # root
crontab -l        # 列出
crontab -r        # 删除全部(小心!)

首次会让你选编辑器——nano(简单)或 vim

实用示例

每晚备份

0 3 * * * /usr/local/bin/backup-wp.sh >> /var/log/backup.log 2>&1

每小时清理日志

0 * * * * find /var/log/myapp -name "*.log" -mtime +30 -delete

每 5 分钟健康检查

*/5 * * * * curl -s -o /dev/null -w "%{http_code}" https://你的-站点.com >> /var/log/health.log

数据库备份

30 2 * * * mysqldump -u root -p'密码' 数据库 | gzip > /backup/db-$(date +\%Y\%m\%d).sql.gz

⚠️ % 在 crontab 是特殊字符——用 \% 转义。

证书续期

0 4 * * * certbot renew --quiet && systemctl reload nginx

SSL 详情见我们的 Let’s Encrypt 文章

如何验证 cron 跑了?

sudo systemctl status cron
sudo tail -f /var/log/syslog | grep CRON
sudo tail -f /var/log/cron

测试时——计划在 1-2 分钟后,观察日志。

常见坑

  • Cron 没跑:用绝对路径写命令(/usr/bin/php,不是单纯 php
  • 没有环境变量:cron 环境精简 → 在脚本顶部设 PATH=
  • 忘记 %date +%Y%m%d 在 cron 里坏 → \%
  • 看不到输出:没配 mail 时 STDOUT 丢失 → >> log 2>&1
  • PHP/Node 脚本超时:作为 CLI 跑,不受 Web 超时约束——但长脚本放后台
  • 时区:UTC 服务器时间会偏 → sudo timedatectl set-timezone Asia/Shanghai

systemd 计时器替代(现代)

systemd timers 比 cron 更现代,日志集成更好:

/etc/systemd/system/backup.service

[Unit]
Description=Daily backup

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup-wp.sh

/etc/systemd/system/backup.timer

[Unit]
Description=Daily backup timer

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target
sudo systemctl enable --now backup.timer
sudo systemctl list-timers

结论

Cron 是服务器自动化的基础。5 分钟学会,每天用。 备份、清理、监控——全靠 cron。

相关:服务器备份 · Linux 磁盘扩容

标签 Linux Cron 自动化 教程

相关 文章

您可能也喜欢这些。

联系我们