Linux的系统周期化任务

一、延迟任务

       在系统中我们的维护工作大多数时在服务器行对闲置时进行 我们需要用延迟任务来解决自动进行的一次性的维护 延迟任务时一次性的,不会重复执行 当延迟任务产生输出后,这些输出会以邮件的形式发送给延迟任务发起者 在RHEL9中默认系统中的所有普通用户都可以发起延时任务。

1.延迟任务的发起

       在系统中我们可以使用at命令来发起延迟任务,at命令执行是调用的是atd服务,即使系统最小化安装atd也会被安装到系统中,at 任务信息存放在系统中/var/spool/at目录中,at 任务的日志文件被存放到/var/log/cron中 at 任务执行时如果遇到系统处于关闭状态,那么在开启时atd任务会检测未执行的任务并且立即执行 延迟任务发起方法如下:

] # at 11:30

at> touch /mnt/file{1..5}

at> <EOT> << CTRL +D

2.at命令参数详解

at 命令执行格式为at [参数] [时间]

at 命令常用参数

-m 当任务完成之后,即使没有标准输出,将给用户发送邮件

-l atq的别名,可列出目前系统上面的所有该用户的at调度

-d atrm的别名,可以取消一个在at调度中的工作

-v 使用较明显的时间格式,列出at调度中的任务列表

-c 可以列出后面接的该项工作的实际命令内容

-f 从文件中读取作作业

3.at命令的时间表示方法

HH:MM 在今天的HH小时MM分钟执行,如果今天的这个时间点已经过了,则明天执行

HH:MM YYYY-MM-DD 强制规定在某年某月的某一天的特殊时刻进行该工作

now + 2 minutes 从现在开始几分钟minutes, hours, days, or weeks

4.如何非交互式的设定延迟任务

在生产环境中我们通常会用脚本来设定一个或多个延迟任务但是at任务的执行需要交互的进行,这样无法 满足脚本自动化运行,输入重定向可以解决交互问题:

]# vim at_job.sh

#!/bin/bash

at now+1min  <<EOF

rm -rf /mnt/file{1..5}

date

EOF

5.延迟任务的安全优化

at任务在执行时首先会查看执行者是否在名单中

系统中默认只存在黑名单/etc/at.deny,写入此文件中的用户会被禁止使用at任务

在系统中可以手动建立白名单/etc/at.allow,当此文件出现黑名单不会被检测

白名单出现只有root用户和白名单用户可以执行at任务

如果系统中没有黑白名单那么只有root用户可以执行任务

黑白名单为用户列表,每个用户一行

6.实验

6.1延迟任务的发起

首先先查看atd的守护进程是否开启,如关闭则系统延时任务无法使用

命令为systemctl status atd.service ,显示running则为开启

然后是利用延时任务在一分钟后再/mnt中建立一个文件

 

然后利用下面这个命令来监控文件是否建立

watch -n 1 ls -Rl /mnt/

在比如说从现在开始的一分钟后执行任务,在/mnt中建立文件

然后查看是否建立成功


 

6.2非交互式的操作 

接着我们用非交互式的来操作,先进入编辑


然后来编辑

接着开启任务

sh at.sh

 

6.3at命令的详解

首先是-m,发送邮件,我们需要建立软件仓库和安装几个与mail有关的软件

 

然后去启动

 

 然后去监控mail

watch -n 1 mail

然后发起一个延迟任务,当延迟任务有输出那么这个输出会以邮件的形式发送给at命令的执行者

 

退出at界面按 q,没有输出邮件就不会产生,想要产生,就at -m

二、定时任务

(延时任务为一次性的,定时任务为永久的)

1.定时任务介绍

和延迟任务类似,我们可以用crontab来解决自动进行的周期性的维护

定时任务类似手机闹钟,会重复执行 当

定时任务产生输出后,这些输出会以邮件的形式发送给延迟任务发起者

在RHEL9中默认系统中的所有普通用户都可以发起定时任务

2.定时任务发起

在系统中我们可以使用crontab命令来发起用户级定时任务

在系统中/etc/cronfilename 是系统级定时任务,只有root用户可以发起

定时任务执行是调用的是crond服务,即使系统最小化安装crond也会被安装到系统中

定时任务信息存放在系统中/var/spool/cron目录中,存放文件和发起人名称一致

定时任务的日志文件被存放到/var/log/cron中

定时任务执行时如果遇到系统处于关闭状态,那么在开启时crond任务会检测未执行的任务并且立 即执行

3.发起用户级周期任务

周期任务发起方式:crontab命令的执行格式为:crontab –u 用户 –e

crontab命令参数如下

-u:用来设定某个用户的crontab服务此参数一般有root用户来运行。

file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab

-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

-r:从/var/spool/cron目录中删除某个用户的crontab文件

-i:在删除用户的crontab文件时给确认提示。

crontab 在设定定时任务是会以vi命令打开临时文件在保存时会把内容同步到/var/spool/cron中

文件格式为:分 时 天 月 周 执行动作

11 11 * * * echo hello #每天11点11分执行echo hello 命令

时间表示方式

*                  每个          * * * * *           每分钟

1,5            1和5       1 1,5 * * *      1:10和5:01

1-5               1到5       * 1-5 * * * *     1点到5点的每分钟

*/5                每隔5       */5 * * * *         每5分钟

注:在时间表示中天和周是分开计算的,* * 5 * 5表示每月5号以及每个周的周5

4.发起系统级别的周期任务

当写的任务内容存入相应的文件当中,则会按照自定义、每天等等来执行任务,也就是当我们把要执行的动作记录为脚本,并把脚本放到相对应的目录中他就会以相应的时间执行

系统级别crontab目录详解

/etc/cron.d 系统自定义周期任务

/etc/cron.daily 每天周期任务

/etc/cron.hourly 每小时周期任务

/etc/cron.monthly 每月周期任务

/etc/cron.weekly 每周周期任务

自定义周期任务设置方式

 ]# vim /etc/cron.d/job

分钟   小时   天 月 周   用户   动作

01      09-17     * * *       root   date

5.定时任务执行优化

定时任务在执行时首先会查看执行者是否在名单中

系统中默认只存在黑名单/etc/cron.deny,写入此文件中的用户会被禁止使用定时任务

在系统中可以手动建立白名单/etc/cron.allow,当此文件出现黑名单不会被检测

白名单出现只有root用户和白名单用户可以执行定时任务

如果系统中没有黑白名单那么只有root用户可以执行任务

黑白名单为用户列表,每个用户一行

黑白名单只针对用户级定时任务进行限制

6.实验

6.1用户级别crontab的使用

首先先进行监控

然后指定用户和编辑

这个为每分钟运行一次,即使将文件删除,一分钟后也会重新建立,因为是永久性的命令,这个命令永久的原因是会将这个命令存入/var/spool/cron/root当中

 

6.2系统级别的crontab的使用

首先我们还是进入监控

我们进入到自定义当中

然后自定义创建系统级别crontab任务

然后进行查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值