定时任务:crontab

定时任务的守护进程:crond

    定时任务是一个服务,在后台有一个守护进程crond。crond服务启动状态下,定时任务才会在指定的时间自动执行。其实就相当于,任务交给crond托管了,在设置的时间,crond帮我们自动执行对应的任务。

查看crond服务状态

systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2022-04-17 10:19:21 EDT; 14h ago
 Main PID: 855 (crond)
    Tasks: 1 (limit: 23522)
   Memory: 1.2M
   CGroup: /system.slice/crond.service
           └─855 /usr/sbin/crond -n

    要看到,服务状态为 active(running) 状态,设置的定时任务才会自动执行。如果服务的状态是关闭的,那么将服务启动就可以了。

启动crond服务

# 启动服务
systemctl start crond
# 将服务设置为开机启动
systemctl enable crond

设置定时任务:crontab

    定时任务的服务启动后,就可以通过crontab命令设置定时任务了。

基础语法

crontab [选项]

参数说明

选项 说明
-l 查看现有的定时任务
-e 编辑或者新增定时任务
-r 删除当前用户所有的定时任务

使用帮助

    在进一步学习定时任务之前,有必要先了解一下crontab的设置格式,这个时候可以参考一下crontab的帮助文档。

$ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

    下面对帮助文档,展开说明一下。

SHELL=/bin/bash

    第一行SHELL变量指定了系统要使用哪个shell,这里是bash。

PATH=/sbin:/bin:/usr/sbin:/usr/bin

    第二行PATH变量指定了系统执行命令的路径。

MAILTO=root

    第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户。

*  *  *  *  * user-name  command to be executed

    这一行,系统的帮助文档也给出了详细的说明。

字段 说明 取值范围
第一个 * 一个小时的第几分钟 0 ~ 59
第二个 * 一天的第几个小时 0 ~ 23
第三个 * 一个月中和第几天 1 ~ 31
第四个 * 一年中的第几个月 1 ~ 12
第五个 * 一周中的星期几 0 ~ 7 (0、7都是代替星期天)

    除了以上的基本用法以外,还可以使用以下特殊字符

符号 说明
* 代表所有的取值范围内的数字
如月份字段为*,则表示1到12个月
/ 代表每一定时间间隔的意思
如分钟字段为*/10,表示每10分钟执行1次
- 代表从某个区间范围,是闭区间
如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次
, 分散的数字(不一定连续),如1,2,3,4,7,9

实例

    每分钟执行一次的任务配置

* * * * * command

    每小时第3,第15分钟执行的命令

3,5 * * * * command

    每天上午8-11点的第3和15分钟执行command

3,15  8-11  *  *  *  command

    每隔2天的上午8-11点的第3和15分钟执行command:

3,15  8-11  */2  *   *  command

    每个星期一的上午8点到11点的第3和第15分钟执行command

3,15  8-11   *   *  1 command

    每晚的21:30重启smb

30  21   *   *  *  /etc/init.d/smb restart

    每月1、10、22日的4 : 45重启smb

45  4  1,10,22  *  *  /etc/init.d/smb restart

    每周六、周日的1 : 10重启smb

10  1  *  *  6,0  /etc/init.d/smb restart

    每天18 : 00至23 : 00之间每隔30分钟重启smb

0,30  18-23  *  *  *  /etc/init.d/smb restart

    每一小时重启smb

*  */1  *  *  *  /etc/init.d/smb restart

    晚上11点到早上7点之间,每隔一小时重启smb

*  23-7/1  *   *   *  /etc/init.d/smb restart

    每月的4号与每周一到周三的11点重启smb

0  11  4  *  mon-wed  /etc/init.d/smb restart

    每小时执行/etc/cron.hourly目录内的脚本

0  1   *   *   *     root run-parts /etc/cron.hourly
posted @ 2022-06-13 21:02  zaza_h  阅读(100)  评论(0编辑  收藏  举报