定时任务: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
混迹IT行业多年,技术依然渣渣,故名zaza-h
记录和分享自己的学习历程,如果有错漏,请各路大神帮忙指正。也欢迎大家多多讨论,共同成长
本文来自博客园,作者:zaza_h,转载请注明原文链接:https://www.cnblogs.com/zaza-h/p/16372319.html