14.RedHat认证-Linux计划任务

14.RedHat认证-Linux计划任务

1.一次性计划任务介绍

1.1 计划任务介绍

所谓一次性计划任务,就是按照计划只执行一次的任务。
无论是windows还是Linux都具备一次性计划任务的功能。
windows参考图形操作自己慢慢点。
Linux中的at命令是用来创建一次性计划任务的,at命令有一个服务atd会以后台模式运行,检查当前的时间来决定是否运行"计划"。
atd服务会检查系统上的一个特殊目录来获取at命令的提交的"计划"。

默认情况下,atd服务每60秒检查一次目录,有"计划"时,会检查"计划"运行时间,如果"计划运行"的时间与当前时间匹配,则运行此"计划"。

1.2 创建一次性计划任务

#我们来看下面一个备份yum仓库文件的脚本
[root@nfs-server ~]# vim /root/backup-yum-repo.sh
[root@nfs-server ~]# chmod +x /root/backup-yum-repo.sh 
[root@nfs-server ~]# cat /root/backup-yum-repo.sh
--------------------------------------------------------------
#!/bin/bash
mkdir /opt/yum-repo-backup-dir -p
cp -r /etc/yum.repos.d /opt/yum-repo-backup-dir/yum.repos.d-`date "+%Y-%m-%d-%H:%M:%S"`.bak
--------------------------------------------------------------

#使用at命令来执行一次性备份yum仓库文件,为了顺利的查看at的执行结果,使用下面命令来关闭ntp同步,并设置你的时间。
#timedatectl set-ntp 0命令关闭了ntp同步
timedatectl set-ntp 0

#date -s "2020-12-12 00:00:00"命令设置日期和时间
[root@nfs-server ~]# date -s "2020-12-12 00:00:00"

#几种执行时间的情况
#1.下午的5点执行,也就是17:00执行,如果此时时间已经过了当天下午,那么顺延到第二天
[root@nfs-server ~]# at 5:00PM
at> /root/backup-yum-repo.sh
at> <EOT>
job 1 at Sat Dec 12 17:00:00 2020
#提交at的计划任务使用ctrl+d
---------------------------------------------
# 使用atq 可以看到计划任务
[root@nfs-server ~]# atq
2       Sat Dec 12 18:30:00 2020 a root
---------------------------------------------


# 然后更改一下时间,看是否备份成功!
[root@nfs-server ~]# date -s "2020-12-12 16:59:50"
[root@nfs-server ~]# ls /opt/yum-repo-backup-dir/
yum.repos.d-2020-12-12-17:00:00.bak

#2. 6点22分执行,如果此时时间已经过了当天的6:22分,那么顺延到第二天
at 6:22
at> /root/backup-yum-repo.sh
at> <EOT>


#3.2021年的3月15号的此刻执行,如果没有指定time,那么就是定制计划任务的time作为执行天的time
at 2021-03-15
at> /root/backup-yum-repo.sh
at> <EOT>


#4.2021年3月15号的12点12分执行
at 12:12 2021-03-15
at> /root/backup-yum-repo.sh
at> <EOT>


#5. 2天之后的9点15分执行
at 9:15 + 2 days
at> /root/backup-yum-repo.sh
at> <EOT>


#6.在周一执行
at monday
at> /root/backup-yum-repo.sh
at> <EOT>

1、星期日:Sunday [ˈsʌndi]],英文缩写:SUN。
2、星期一:Monday [ˈmʌndi],英文缩写:MON。
3、星期二:Tuesday [ˈtju:zdi],英文缩写:TUE。
4、星期三:Wednesday [ˈwenzdi],英文缩写:WED。
5、星期四:Thursday [ˈθə:zdi]],英文缩写:THU。
6、星期五:Friday [ˈfraidi],英文缩写:FRI。
7、星期六:Saturday [ˈsætədi]],英文缩写:SAT。

#不能在过去的时间使用at,没有后悔药
[root@nfs-server ~]# at 12:00 2019-12-12
at: refusing to create job destined in the past

1.3 一次性计划任务管理

atq
[root@rhel8-23 ~]# atq
24 Mon Mar 15 17:01:00 2021 a root
25 Sun Dec 12 17:02:00 2021 a root
# atrm 删除计划任务
[root@rhel8-23 ~]# atrm 24   
[root@rhel8-23 ~]# atq
25 Sun Dec 12 17:02:00 2021 a root

at -c [job_id]  # 查看计划任务的详细信息

1.4 一次性计划任务使用控制

[root@nfs-server ~]# ls /etc/at.deny 
[root@nfs-server ~]# ls /etc/at.allow # 系统中默认是没有at.allow文件的,可以自己创建

在你的操作系统当中可能同时有多个用户在使用at命令设置一次性计划任务,
那么你可以控制哪些用户可以使用计划任务,哪些用户不可以使用计划任务。
at一次性计划任务的白名单是at.allow,黑名单是at.deny,不建议既使用黑名单,又使用白名单。
建议使用白名单,白名单比黑名单力度要强。默认在rhel8.0系统中默认是没有at.allow文件的,可以自己创建。

at.allow的优先级是高于at.deny


# 举例,比如,在at.deny 文件中,加入某个用户的用户名,就可以禁止这个用户执行at命令
vim /etc/at.deny
-----------
gzy   #gzy用户禁止执行
-----------
# at.allow的用法同deny一样。

2.周期性计划任务介绍

周期性计划任务相比一次性计划任务来说相当于定制周期性的"计划"来执行某个任务,比如每分钟执行,每小时执行,

每天执行,每周执行,每月执行,每天的03:00执行,每周三02:12执行,每月3号的04:16执行,每隔2分钟执行,

每天的03:00,03:30执行等等…

上面的周期性计划执行周期你根据你的情况来定的,并没有准确的"公式"来确定你的任务一定该设置怎样的日期。

但就拿备份操作来说,一般都会选择服务器负载比较低的时间来执行。

2.1 周期性计划任务介绍

当我们执行备份操作的时候一般是不会只进行一次备份的,大多情况是要周期性的备份来减轻运维负担。但是这个时候
我们又会产生新的问题,比如考虑如下场景:
如果周期性的备份的周期并不长,比如每天都按照计划自动的执行备份任务,那么可能会更多的占用你的磁盘,如果不
进行定期的清理,那么可能会导致磁盘占满影响应用的"重大事故"。那么所谓"定期清理"如何来做就变得尤为重要,所
以在写备份脚本来实现周期性备份的时候一定要考虑这个问题
我下面的脚本仅供参考
---------------------------------------------------------------------------
[root@rhel8-23 ~]# cat backup-yum-repo.sh

#!/bin/bash
mkdir /opt/yum-repo-backup-dir -p
cp -r /etc/yum.repos.d /opt/yum-repo-backup-dir/yum.repos.d-`date "+%Y-%m-%d-%H:%M:%S"`.bak
if [ `ls /opt/yum-repo-backup-dir/ | wc -l` -ge 10 ]
then
for i in `ls -tr /opt/yum-repo-backup-dir/ | head -5`
	do
		rm -rf /opt/yum-repo-backup-dir/$i
	done
fi
---------------------------------------------------------------------------

我们针对上面简单的备份脚本进行了一些扩展。加了一个条件判断和循环,实现了保证系统中只有5~9个最新的备份文
件存在。这里只以备份文件的数量作为判断依据,并没有考虑到备份文件的大小以及当前磁盘的使用率。这往往是不符
合生产环境要求的,但是这只是一个示例,注意,自己写脚本一定要在lab环境上测试,并且是反复测试,而且测试情况必
须满足自己所设置的所有条件,没问题了,再在生产环境上使用。

上述脚本做了一个条件判断,检查/opt/yum-repo-backup-dir/里面的文件数量,如果大于等于10个则进行for循
环操作。for循环读取了/opt/yum-repo-backup-dir/目录下最旧的5个备份文件(ls -tr会让文件以时间排
序,-t参数是以修改时间排序,-r参数是时间的反序),并将它们分别传入-i参数,然后rm命令删除指定文件。
(使用rm命令的时候一定要注意!!!!!!!!!!)

上述脚本在反复运行之后会保证/opt/yum-repo-backup-dir/备份文件数量维持在5~9个。实际自己写脚本的时候
一定要考虑分区使用率,要保证分区剩余空间不能影响应用的运行,具体情况具体分析。

2.2 创建周期性计划任务

创建周期性计划任务使用的是crontab命令,和一次性计划任务一样周期性计划任务也有服务来监控"周期性的计划",
这个服务的名字是crond。

crontab -e 			#为编辑当前shell用户的计划任务。
crontab -e -u gzy 	#为编辑gzy用户的计划任务,只有root用户可以编辑其他人的计划任务,非root用户只能编辑自己的计划任务
crontab -l 			#为列出当前用户的所有计划任务
crontab -l -u gzy 	#为列出gzy用户的所有计划任务

编辑计划任务的操作和vim编辑一个文件一样,但是要遵循特定的格式才能让计划任务生效,每一行都代表一个计划任务,标准的格式如下:

在这里插入图片描述

#下面是一些计划任务格式示例
每分钟一次
* * * * * /path/to/script

每小时的整点一次
0 * * * * /path/to/script

每天凌晨1点准时运行
0 1 * * * /path/to/script

每天凌晨1点这个小时中的每分钟运行一次
* 1 * * * /path/to/script

每个月的第一天的每分钟运行一次
* * 1 * * /path/to/script

1月份中的每一分钟都运行一次
* * * 1 * /path/to/script

每周第0天即周日的每一分钟
* * * * 0 /path/to/script

每5分钟一次
0/5 * * * * /path/to/script

每5分钟一次
0/5 0/2 * * * /path/to/script

每个小时的第一分钟和第10分钟分别运行一次,例如3:01,3:10
1,10 * * * * /path/to/script

每个小时的第15分钟~第20分钟每分钟运行一次,总共一小时运行6次
15-20 * * * * /path/to/script

每年4月~6月,4月,5月,6月的10号和15号这2天,从0点开始,包括0点,每两个小时的第1分钟和第2分钟,第5~8分
钟分别运行一次
1,2,5-8 0/2 10,15 4-6 * /path/to/script

2.3 周期性计划任务配置文件

除了可以crontab创建计划任务之外,还可以使用vim直接编辑crontab的配置文件来创建计划任务,和crontab命令
进入的界面编辑的格式有一处不同,就是要在最开始的分时日月周后面加上一个执行用户,此文件只有root可以编辑。
[root@rhel8-23 ~]# cat /etc/crontab

#注意:
除了/etc/crontab之外,还有cron.daily/,cron.hourly/,cron.weekly/,cron.monthly/等目录,下面
存放的是每天,每小时,每周,每月自动执行的脚本,里面存放着系统默认的周期性计划任务,不明白不要乱动,可以
自己写脚本加到指定目录中,并加上执行权限,让他们自动执行。

/etc/cron.d/目录下存放的文件格式和/etc/crontab的格式是一样的,是一个crontab配置文件的扩展目录,默
认情况下也会读取这个目录里面定义的周期计划任务


2.4 周期性计划任务使用控制

和at一样,cron计划任务也在/etc/下有cron.deny和cron.allow对可以使用计划任务的用户实现控制,白名单要强于黑名单

2.5 精确到秒级的cron任务

# 精确到秒级,没什么意义,做了解即可
* * * * * command_or_path_to_script_to_execute
* * * * * sleep 5; command_or_path_to_script_to_execute
* * * * * sleep 10; command_or_path_to_script_to_execute
* * * * * sleep 15; command_or_path_to_script_to_execute
* * * * * sleep 20; command_or_path_to_script_to_execute
* * * * * sleep 25; command_or_path_to_script_to_execute
* * * * * sleep 30; command_or_path_to_script_to_execute
* * * * * sleep 35; command_or_path_to_script_to_execute
* * * * * sleep 40; command_or_path_to_script_to_execute
* * * * * sleep 45; command_or_path_to_script_to_execute
* * * * * sleep 50; command_or_path_to_script_to_execute
* * * * * sleep 55; command_or_path_to_script_to_execute
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值