Linux CentOS 8(计划任务_Cron)
Posted 正月十六工作室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux CentOS 8(计划任务_Cron)相关的知识,希望对你有一定的参考价值。
Linux CentOS 8(计划任务_Cron)
目录
1. 常见的计划任务
在Linux系统中,常见的能实现定时任务的软件有 at、cron 和 anacron。
其中,各个服务有其独特的点:
At:适合仅执行一次就结束的调度命令,需要在后台启动守护进程atd;
Cron:适合脚本、单句命令的调度,需要在后台启动守护进程Crond,并通过Crondtab命令实现;
Anacron:适合实现以天为周期,在关机状态下未执行的任务可在开机后继续执行。
当然,计划任务通常由 Cron 服务接管,本文将着重介绍 Cron 服务。与 Windows 下的计划任务相类似,在操作系统安装后,默认会安装此服务工具,且会自启守护进程(Crond),定期检查并按照配置文件执行计划好的任务。
2. 了解 Cron
2.1 Cron 的结构
当 Cron 守护进程(Crond)启动后,会先在 /var/spool/cron
目录中检查用户配置文件的存在(以/etc/passwd
文件中的用户名命名)。如果找到 Crontab 配置文件,则将此文件载入内存中,由Cron调度进程(Crontab)读取后进行调度,执行相应的任务;如果没有找到 Crontab 配置文件,则 Crond 守护进程将会进入“休眠”状态,释放后台资源,减小系统开销,如图2-1所示。
与此同时,Cron 守护进程会在每分钟自动唤醒一次,当 Cron 调度进程中的时间日期与系统时间日期相吻合时,就会执行相应的Cron 任务。执行完成后,任何输出(例如计划任务的执行结果等)都将会推送至设定该 Cron 任务的所有者,或是 Cron 调度进程中 MAILTO 环境变量的指定用户。
因此,Cron 服务无需用户干预,只需用户创建编辑 Crontab 配置文件即可。
2.2 Cron 的使用
2.2.1 Cron 服务
常规的控制命令
systemctl start crond //启动Crond服务
systemctl stop crond //停止Crond服务
systemctl reload crond //重载Crond服务
systemctl restart crond //重启Crond服务
设置 Cron 服务开机自启
Systemctl enable crond
检查 Cron 是否已设置为开机自启
ntsysv //用于设置系统的各种服务的软件
如果 Cron 服务已设为开机自启,则输入上述命令的情况,如图2-2所示。
图2-2 通过 ntsysv 查看 Cron 服务是否设为开机自启2.2.2 Cron 名单
为了提高安全性,可以通过修改 Cron 的名单文件,允许或限制特定用户使用 Cron 服务。涉及 Cron 的名单文件有两个,详情请见下表。
表2-1 Cron的白名单和黑名单对比类别 | 文件绝对路径 | 优先级 | 作用 |
---|---|---|---|
白名单 | /etc/cron.allow | 高 | 只有在该文件内写入的用户才能使用Cron服务 |
黑名单 | /etc/cron.deny | 其次 | 在该文件内写入的用户,将无法使用Cron服务 |
通过表格归纳,我们发现Cron的白名单要比黑名单优先;一般来说,建议保留一个名单即可(然而系统默认是保留黑名单,即 /etc/cron.deny
文件)。
2.2.3 Crontab 命令
通过上文了解,我们知道了 Cron 服务的用户 Crontab 配置文件默认目录位于/var/spool/cron
,且每个用户均可配置;但是用户并不能直接配置上述文件,这需要使用到 Crontab 命令。
Crontab 命令的格式如下所示。
Crontab [参数(-u <用户名>|-l|-r|-e)] [Crontab配置文件地址]
参数说明
表2-2 Crontab 命令参数参数 | 说明 |
---|---|
-u | 指定要设置计划任务的用户;如果不指定该参数,将设置为操作者本人 |
-l | 显示该用户的计划任务设置 |
-r | 删除该用户的计划任务设置 |
-e | 编辑该用户的计划任务设置 |
当用户创建一个新的 Crontab 文件时,其每一行都代表一项任务,总共分为6个字段,前5段为时间设定段(遵循Cron表达式),第六段为要执行的命令段,格式如下:
minute hour day month week command
字段说明如表2.-3 字段说明所示。
表2.-3 字段说明字段 | 说明 |
---|---|
Minute 分钟 | 表分钟,取值为整数0~59 |
Hour 小时 | 表小时,取值为整数0~23 |
Day 日期 | 表日期,取值为整数1~31 |
Month 月份 | 表月份,取值为整数1~12 |
Week 周 | 表星期几,取值为整数0~7 (这里的0和7均表示星期天) |
Command | 要执行的命令或者是编写好的脚本文件 |
注意:周与日、月不可同时并存。(存在同日同月但不同星期的情况)
在前5个表示时间的字段中,还可以使用下列4种特殊符号,但是不能留空。
表2-4 时间字段所支持的特殊符号和说明特殊符号 | 说明 | 举例 |
---|---|---|
* 星号 | 代表所有可能的值 | “* * * * *” 表示每分钟执行一次 |
, 逗号 | 可以用逗号隔开的值指定一个列表范围 | “1,2,5,7,8,9” |
- 中杠 | 可以在整数间用中杠指定一个区间范围 | “2-6” 表示 “2,3,4,5,6” |
/ 正斜线 | 可以用正斜线指定时间的间隔频率 | “0-23/2“ 表示每两小时执行一次 |
2.2.4 创建或编辑 Crontab 文件
在CentOS 8.2中,默认情况下,Crontab 命令会调用VI编辑器,进行 Crontab 文件的创建或编辑操作。也因此,操作与常规使用VI编辑器一致,例如:按 i
输入,按 ESC键 退出输入模式,按 :x
回车保存,按ESC键再输入 :wq
后回车保存并退出。
2.2.5 Crontab 文件示例
参照上文 Crontab 命令的使用方法,创建一个 Crontab 文件;需要注意的是,每项工作都是一行,例子如下:
示例1:每分钟都执行一次 /bin/ls
* * * * * /bin/ls
示例2:每隔2小时20分钟,执行一次 echo "Jan16 Official"
20 0-23/2 * * * echo “Jan16 Official”
示例3:每月12号和24号的凌晨零点,重启Apache服务
0 0 12,24 * * /sbin/service httpd restart
提示:当任务在指定时间执行后,系统会发送一个信息给当前的用户,显示该任务的内容;若你不想收到这样的信息,请在每一行空一格之后加上 > /dev/null 2>&1
即可。
例如,在示例3的基础上添加以下文本:
0 0 12,24 * * /sbin/service httpd restart > /dev/null 2>&1
这样,当Cron服务执行完成后,不再发送该信息。
3. 操作示例
3.1 操作平台
本操作示例将以CentOS 8.2为模板,在X86-64平台上,使用 VMware 虚拟机,其主要参数如下表。
表3-1 虚拟机配置参数项目 | 配置 |
---|---|
处理器 | 1核心 |
内存 | 2GB |
硬盘 | 12GB |
网络 | NAT |
3.2 项目:通过Cron清除缓存
3.2.1 项目要求
某公司新增了Linux服务器,需要配置周期性任务,具体要求如下:
为root账户设定每日凌晨0点准时执行清除页面缓存的指令。
注: 清除页面缓存的指令为:echo 1 > /proc/sys/vm/drop_caches
3.2.2 项目操作
首先打开系统,进入终端,以root的身份进行配置,如图3-1所示。
为了方便管理,这里采用脚本的方式来执行计划任务。
在root的家目录创建名为clean_rc.sh
文件。
vi /root/clean_rc.sh
在该文件中写入以下内容,保存并退出编辑器,如图3-2所示。
#!/bin/bash
echo 1 > /proc/sys/vm/drop_caches
图3-2 Crontab文件的编辑界面
给予clean_rc.sh文件执行权限。
chmod 755 /root/clean_rc.sh
赋予权限后如图3-3所示。
使用Crontab
命令,为root用户设定计划任务,如图3-4所示。
crontab -u root -e
添加以下内容,保存并退出。
0 0 * * * /root/clean_rc.sh
保存好计划任务后,会提示已安装新的 Crontab 文件。
图3-4 配置并安装计划任务脚本(root用户)使用Crontab -u root -l
查看root用户的计划任务配置,如图3-5所示。
至此,项目操作完成。
3.2.3 项目验证
打开系统,进入终端,使用root用户修改时间(在当日23:59:59之前)。
date -s “20210608 23:59:00”
在当日的23:59:59之前输入free -m
查看内存使用量,如图3-6所示。
等到次日凌晨0点,再次输入free -m
查看内存使用量,发现可用内存有所增加,如图3-7所示。
制作成员: 陈诺
排版: 裕新
初审: 杨佳佳
复审: 二月二
点击下方“正月十六工作室”查看更多学习资源
以上是关于Linux CentOS 8(计划任务_Cron)的主要内容,如果未能解决你的问题,请参考以下文章