cron


在 Linux 中,cron 是一个用来安排和运行重复性任务的后台服务(或者说是一个守护进程,daemon)。

这些任务通常被称为 cron jobs

它的名字来源于希腊语 chronos,意为“时间”,这很恰当地描述了它的核心功能。

为什么要用 cron?


设想你每天需要备份一次数据库,或者每周要清理一次日志文件。如果没有 cron,你可能需要手动在特定时间运行这些命令,或者自己写一个脚本然后用循环来模拟这个过程。这既耗时又容易出错。

cron 的出现完美解决了这个问题。你只需要设置好任务的时间和要执行的命令,cron 就会在指定的时间自动帮你完成,解放了你的双手。

如何使用 cron?


使用 cron 最常见的方法是编辑 crontab 文件。crontab 的意思是 “cron table”(cron 表格),这个文件记录了所有你需要 cron 运行的任务。

每个用户都有自己的 crontab 文件,你可以通过以下命令来编辑它:

crontab -e

首次运行这个命令,系统可能会让你选择一个文本编辑器(比如 vim 或 nano)。选择好后,你就会看到一个新文件,其中可能有一些注释。

像下面这样:

user@user-vm:~/Desktop$ crontab -e
no crontab for xxx - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
3. /bin/ed

cron 任务的语法


一个 cron 任务的语法由六个部分组成,前面五个是时间字段,最后一个是要执行的命令。

* * * * * 要执行的命令
| | | | |
| | | | |--- 星期几 (0 - 7, 0 和 7 都表示周日)
| | | |----- 月份 (1 - 12)
| | |------- 日期 (1 - 31)
| |--------- 小时 (0 - 23)
|----------- 分钟 (0 - 59)

常用的特殊字符


字符含义示例
*匹配所有值* 在分钟字段表示每分钟都执行
,列举值1,15,30 在分钟字段表示第1、15和30分钟执行
-指定一个范围9-17 在小时字段表示早上9点到下午5点
/指定步长*/5 在分钟字段表示每隔5分钟

例子


30 2 * * * /home/user/backup.sh
0 12 * * 1 /home/user/weekly-report.py
*/10 * * * * /usr/bin/some-command

常用命令


crontab -l
crontab -r

注意要点

  1. 路径问题:在 cron 任务中,命令的执行路径可能和你直接在终端中不一样。建议使用绝对路径来指定命令或脚本,以避免找不到命令的错误。
  2. 环境变量: cron 运行时的环境变量可能非常有限。如果你的脚本依赖某些环境变量(比如 PATH),最好在脚本开头明确设置它们。
  3. 输出: 默认情况下,cron 任务的任何输出(标准输出和标准错误)都会以邮件的形式发送给 crontab 的所有者。如果你不希望收到这些邮件,可以在命令末尾重定向输出到 /dev/null
* * * * * /path/to/my/script.sh > /dev/null 2>&1
# 这会将标准输出 (> /dev/null) 和标准错误 (2>&1) 都丢弃掉。

分类

Published at:
August 31, 2025
Keywords:
Cron
crontab