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所示。

图2-1 Cron 服务结构

与此同时,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所示。

图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所示。

图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-5 查看root用户的计划任务配置

至此,项目操作完成。

3.2.3 项目验证

打开系统,进入终端,使用root用户修改时间(在当日23:59:59之前)。

date -s “20210608 23:59:00

在当日的23:59:59之前输入free -m查看内存使用量,如图3-6所示。

图3-6 计划任务开始前的内存使用量

等到次日凌晨0点,再次输入free -m查看内存使用量,发现可用内存有所增加,如图3-7所示。

图3-7 计划任务生效后内存的使用量

制作成员: 陈诺
排版: 裕新
初审: 杨佳佳
复审: 二月二


点击下方“正月十六工作室”查看更多学习资源

正月十六工作室

以上是关于Linux CentOS 8(计划任务_Cron)的主要内容,如果未能解决你的问题,请参考以下文章

Linux CentOS 8(计划任务_Cron)

CentOS_计划任务之At

CentOS_计划任务之At

CentOS_计划任务之At

Linux系统计划任务之二:cron任务调度

Centos7.5-Linux计划任务与日志的管理