Linux 系统定时任务 Cron(d)服务应用实践
一、Cron(d) 介绍
1、什么是 Cron
Cron 是 Linux 系统中以后台进程模式周期性执行命令或指定程序任务的服务软件。默认情况下,安装完 Linux 操作系统之后,Cron 服务软件便会启动,服务对应的进程名字为 Crond,Crond 服务会定期(默认每分钟检查一次)检查系统中是否有需要执行的任务工作计划。 如果有,则会根据其预先设定的定时任务规则自动执行该定时任务工作。这个 Crond 定时任务服务就相当于我们平时使用的闹钟(或手机闹钟)。
Linux 系统中的 Cron 定时任务执行的最快频率 是每分钟执行一次,因此如果是需要以秒为单位执行的计划任务,Cron 就不适用了。面对这种情况,在工作中可以编写 Shell 脚本,然后作为守护程序执行。 以下是一个每秒钟执行一次任务的脚本:
[root@shy ~]# cat cron.sh
t: cron.sh: 没有那个文件或目录
[root@shy ~]# touch cron.sh
[root@shy ~]# vim cron.sh
while true
do
echo "I am cloud_shy."
sleep 1
done
"cron.sh" 5L, 52C 已写入
[root@shy ~]# cat cron.sh
while true
do
echo "I am cloud_shy."
sleep 1
done
[root@shy ~]#
2、为什么要使用 Crond 定时任务?
Linux 运维工程师的职责之一就是保障数据安全 ,那么,其日常工作任务之一就是不断地对数据进行备份,而很多时候白天系统业务繁忙,因此数据备份的工作只能放到晚上执行,例如,网站数据库数据以及用户上传的图片、文件和程序文件等,一般需要每天晚上做一次备份 。如果没有定时任务工具,管理员就得每天半夜爬起来,登录到系统中手工执行任务计划,直到执行完才能去睡觉。执行任务的过程可能会持续好几个小时,这样一来,一个晚上管理员就都不用睡觉了,这样显然是不行的。那么有什么办法可以解决这个周期性地执行任务计划的问题呢?
这就需要 Linux 系统的定时任务 Cron 工具了,Cron 工具可以很好地帮我们完成需要重复的、周期性地、自动备份等运维工作。
3、不同系统的定时任务种类介绍
a. Windows 系统的定时任务
在继续讲解 Linux 的定时任务之前,我们先来看一看 Windows 的任务计划,Windows 系统也是有定时任务计划工具的。以博主个人电脑上的 win 11 系统为例:
首先搜索:任务计划程序

打开后,点击创建任务:

在 "创建任务" 窗口中进行如下设置:

然后点击 "触发器",进行如下设置:

最后,点击 "操作",进行如下设置:

这样,就完成了 win 11 系统中的自动关机定时任务创建了。如何删除刚刚创建的自动关机定时任务呢?
首先找到活动任务列表,滚动列表找到刚刚创建的自动关机定时任务:

然后,双击打开该任务,进行如下操作:

到此,在 window 11 系统中创建和删除定时任务计划就完成了。接下来,让我们来看看如何在 Linux 中如何玩转定时任务。
b. Linux 系统下的定时任务软件
Linux 系统下的定时任务软件有很多,例如,at、Cron 和 anacron 等,下面分别来简单介绍一下。
- at 定时任务软件(依赖于 atd 服务)适合于仅执行一次 就结束的调度任务工作。例如,某天夜里需要处理一个工作任务,仅仅是这一天的夜里,对于这种突发性的工作任务,那就可以使用该软件。要使得 at 这个软件设定的配置生效,还需要提前启动一个名为 atd 的服务才行,这个工具在工作中的使用需求很少,简单了解一下即可。
- Cron 定时任务软件依赖于 Crond 服务。正如前面所说,通过 crontab 命令可以配置周期性执行的定时任务工作计划,例如,每五分钟做一次服务器时间同步。要使得 crontab 命令设定的配置生效, 还需要事先启动一个服务 Crond 才行。这个 Cron 工具(对应的 crontab 命令以及依赖的 Crond 服务)就是运维工程师在生产工作中最常使用的工具,务必掌握。
- anacron 定时任务软件主要是为非 7×24 小时开机的服务器准备的,anacron 并不能指定具体时间执行任务工作,而是以天为周期或者在系统每次开机后执行任务工作。它会检测服务器停机期间应该执行但是并没有进行的任务工作,并将该任务执行一遍。
c. Linux 系统定时任务 Cron(d)
在 Linux 系统中,Cron 是定时任务的软件名,Crond 是服务进程 名, 而 crontab 命令 则是用来设置定时任务规则的配置命令。Cron 定时任务可以分为用户定时任务计划 和系统定时任务计划两类。
用户定时任务计划:
Crond 服务在工作时会以分钟 为单位查看 /var/spool/cron 路径下以系统用户名 命名的定时任务文件,以确定是否有需要执行的任务计划。如果有,就会将定时任务调度到内存中执行,这部分文件被称为用户定时任务文件 ,使用 crontab 命令编辑的文件最终都会以当前用户名作为文件名存在于 /var/spool/cron 路径下。
如果是系统管理员或某个普通用户定期要做的任务工作,例如每隔 5 分钟与互联网上的时间服务器进行一次时间同步,每天晚上 0 点备份网站站点数据以及数据库数据,就可以使用 crontab 命令配置在 /var/spool/cron 路径下。
系统定时任务计划:
Crond 服务在工作时除了查看 /var/spool/cron 下的定时任务文件之外,还会查看 /etc/cron.d 目录以及 /etc/anacrontab 下的文件内 容,里面通常是每天、每周或每月需要执行的任务,如果有需要执行的任务则会执行,系统定时任务的路径通常如下:
[root@shy ~]# ls -l /etc | grep cron
-rw-------. 1 root root 541 5月 16 2023 anacrontab
drwxr-xr-x. 2 root root 21 2月 28 13:58 cron.d # 系统定时任务的目录
drwxr-xr-x. 2 root root 57 3月 25 15:08 cron.daily # 按天轮询配置的目录。
-rw-------. 1 root root 0 5月 16 2023 cron.deny
drwxr-xr-x. 2 root root 22 2月 28 13:58 cron.hourly # 按小时轮询配置的目录。
drwxr-xr-x. 2 root root 6 6月 10 2014 cron.monthly # 按月轮询配置的目录。
-rw-r--r--. 1 root root 451 6月 10 2014 crontab
drwxr-xr-x. 2 root root 6 6月 10 2014 cron.weekly # 按周轮询配置的目录。
特别注意:系统路径下的定时任务配置格式与前文讲解的用户定时任务的配置格式是不同的。
Crond 服务除了执行用户定时任务计划(/var/spool/cron 目录)以外,还会周期性地自动执行与操作系统相关的定时任务工作,例如轮询系统日志、备份系统数据、清理系统缓存等,这些任务无需人为干预。示例代码如下:
[root@shy ~]# ls -l /var/log/messages* # Linux 系统的日志被自动轮询,以时间结尾。
-rw------- 1 root root 4897 5月 26 20:01 /var/log/messages
-rw------- 1 root root 244914 5月 8 15:47 /var/log/messages-20260508
-rw------- 1 root root 2524 5月 10 03:20 /var/log/messages-20260510
-rw------- 1 root root 121757 5月 18 16:10 /var/log/messages-20260518
-rw------- 1 root root 199885 5月 24 04:20 /var/log/messages-20260524
类似于上述的日志轮询工作就是由系统自身来完成的,不需要系统管理员来设置,命令如下:
[root@shy ~]# ll /etc/logrotate.conf /etc/cron.daily/logrotate
# 每天执行的日志轮询定时任务配置。
-rwx------. 1 root root 219 4月 1 2020 /etc/cron.daily/logrotate
# 日志轮询切割配置文件
-rw-r--r--. 1 root root 662 7月 31 2013 /etc/logrotate.conf
二、用户定时任务 Cron(d)使用说明
1、crontab 定时任务编辑命令语法
在 Linux 运维工作中,通常使用 crontab 命令编辑定时任务,crontab 的相关参数及说明如表 13-1 所示。

特别强调 :-i、-r 参数在生产中很少使用,另外,使用 crontab 命令编辑的文件实际上就是在操作 "/var/spool/cron/当前用户名" 这样的文件。
2、使用定时任务权限及配置文件说明
表 13-2 定时任务软件相关文件及路径说明。

3、以用户定时任务 crontab 命令编辑内容格式
默认情况下,待用户建立定时任务规则之后,该规则所记录的对应配置文件将会存在于 /var/spool/cron 中,其 crontab 配置文件对应的文件名与登录的用户名应一致,例如,root 用户的定时任务配置文件为 /var/spool/cron/root。
利用 crontab 命令编写定时任务的书写格式规则一般可分为 6 个段(每个段之间均通过空格来分隔),前 5 段为时间设定段,第 6 段为所要执行的命令或脚本任务段。基本格式如下:
01 * * * * cmd
02 4 * * * cmd
提示:
- cmd 为要执行的命令或脚本,例如 /bin/sh/server/scripts/oldboy.sh。
- 每个列之间必须要有一个空格,可以存在多个空格。
a. 用户定时任务编写语法中时间段的含义
使用 crontab 命令编辑的用户定时任务中的时间段对应的含义如表 13-3 所示。
表 13-3 crontab 命令编辑的用户定时任务时间段说明

时间记忆口诀:分时日月周。取值范围记忆:正常日期时间范围。
b. 用户定时任务编写语法中特殊字符的含义
在使用 crontab 命令编辑的用户定时任务的语法中,除了时间段以外,还会包含很多特殊字符应用,对应的含义如表 13-4 所示。

4、crontab 命令编辑的定时任务依赖服务说明
crontab 命令编辑的定时任务依赖于 crond 服务,下面来看一下它的运行情况,示例代码如下:
[root@shy ~]# systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) # enabled 说明开机 Crond 为自启动状态。
Active: active (running) since 六 2026-05-23 16:24:56 CST; 3 days ago
Main PID: 963 (crond) # running 为当前启动状态。
Tasks: 1
Memory: 740.0K
CGroup: /system.slice/crond.service
└─963 /usr/sbin/crond -n
... ... ... ...
[root@shy ~]# systemctl restart crond.service # 定时任务重启命令。
特别强调:
- 在编辑定时任务文件之后,无须重启定时任务,Crond 会自动检查更改的变化。
- 当定时任务不能正确执行时,请查看定时任务日志文件 (/var/log/cron)以获取故障信息。