Linux 计划任务(at与crontab)

一次性计划任务 at

Linux 中的【 at 命令是用来创建一次性计划任务的, at  命令有一个服务  atd  以后台的模式运行,通过检查当前的时间来决定是 否运行  " 计划 ,默认情况下, atd  服务每 60 秒检 查一次,有 " 计划 " 时, 则运行此 " 计划 "
示例: 
写一个一次性计划任务: 下午五点进行yum源文件的备份
# 使用 at 命令前检查 atd 服务是否已运行
$ systemctl status atd
● Active: active (running) 


# 写一个备份yum源的脚本
$ cat backup.repo.sh 
#!/bin/bash
cp -r /etc/yum.repos.d/ /etc/yum.repo.bak/yum.repo.d-`date "+%Y-%m-%d-%H:%M:%S"`.bak

# 关闭ntp时间同步以便测试
$ timedatectl set-ntp 0  

# 设置下午5点执行计划任务
$ at 5:05PM   
at> /root/backup.repo.sh                                  
at>     # ctrl + d 保存退出
job 2 at Wed May 31 17:05:00 2023

# 设置系统时间到计划任务的前一分钟
$ date -s "2023-5-31 16:59:00"  
Wed May 31 15:59:00 CST 2023

# 过一分钟查看 已备份成功
$ ls /etc/yum.repo.bak
yum.repo.d-2023-05-31-17:00:54.bak

at 常用命令

# atq查看at计划任务
$ atq
10      Fri Jun  2 17:33:00 2023 a root
9       Thu Jun  1 17:33:00 2023 a root

# at -c 查看计划详细信息
$ at -c 9   

# atrm 删除计划任务
$ atrm 9

# 进入 at 交互式
$ at time

一次性计划任务使用控制:
操作系统中可能有多个用户使用at计划任务,可以设置哪些用户可以使用,哪些用户不可使用at计划任务他,配置文件位于 /etc/at.allow(白名单)   /etc/at.deny(黑名单)
# 使用 at.deny 禁用某个用户

# 不允许某个用户使用at
$ cat /etc/at.deny
user2
$ su - user2
$ at now
You do not have permission to use at.

# 允许某个用户使用at | at.allow 优先于 at.deny
$ cat /etc/at.allow
user2
$ su - user2
$ at now
at> ls 
at> 
job 12 at Wed May 31 17:36:00 2023

周期性计划任务 crontab *

周期性计划任务相比一次性计划任务来说相当于定制周期性的  " 计划 来执行某个任务,比如每分钟执行,每小时执行, 每天执行,每周执行,每月执行,每天的03:00 执行,每周三 02:12 执行等等……
示例:  写备份脚本来实现每分钟备份一次yum源文件,且当备份超过5个文件时自动清理最旧的备份文件
# 编写一个备份yum源文件的脚本
$ cat backup.repo.sh 
#!/bin/bash
cp -r /etc/yum.repos.d/ /etc/yum.repo.bak/yum.repo.d-`date "+%Y-%m-%d-%H:%M:%S"`.bak

i=`ls /etc/yum.repo.bak | wc -l`
if [ $i -ge 5]
then
for i in  `ls -tr /etc/yum.repo.bak | head -1`
do
rm -rf /etc/yum.repo.bak/$i
done
fi

$ crontab -e 
* * * * *  sh /root/backup.repo.sh   # 每分钟执行一次脚本

# ls 命令  
-t 按时间排序,从最新开始排  
-r 倒叙
创建周期性计划任务使用的是 crontab 命令,常用的crontab命令如下:
crontab -e             为编辑当前shell用户的计划任务。
crontab -e -u user2    为编辑user2用户的计划任务,只有root用户可以编辑其他人的计划任务
crontab -l             为列出当前用户的所有计划任务
crontab -l -u user2    为列出user2用户的所有计划任务
编辑计划任务的操作和 vim 编辑一个文件一样,但是要遵循特定的格式才能让计划任务生效,每一行都代表一个计划任 务,标准的格式如下:
Linux 计划任务(at与crontab)_第1张图片

一些计划任务格式示例

* * * * *                    # 每分钟执行一次
0 * * * *                    # 每小时整点执行一次
0 1 * * *                    # 每天1点整执行一次
* 1 * * *                    # 每天1点这个小时中的每分钟执行一次
* * 1 * *                    # 每月1号每分钟执行一次
* * * 1 *                    # 每年1月份每分钟执行一次
* * * * 0                    # 每周日每分钟执行一次
0/5 * * * *                  # 每5分钟执行一次
0/5 0/2 * * *                # 每隔2小时就隔5分钟执行一次
1,10 * * * *                 # 每小时的第1分钟和第10分钟各执行一次
1-15 * * * *                 # 每小时的第1~15分钟内每分钟执行一次
1,2,5-8 0/2 10,15 4-6 *      # 每年4月~6月,4月,5月,6月的10号和15号这2天,从0点开始,包括0点,每两个小时的第1分钟和第2分钟,第5~8分钟分别运行一次

精确到秒级
* * * * *  sleep 5;          # 每分钟的每5秒执行一次

crontab 计划任务使用控制

黑名单
$ cat /etc/cron.deny 
user2
$ su - user2
$ crontab -e
You (user2) are not allowed to use this program (crontab)
See crontab(1) for more information

白名单(优先)
$ cat /etc/cron.allow
user2
$ su - user2
$ crontab -l

考题 *

1. 配置计划任务,以用户harry的身份每2分钟执行一次命令 echo hello

# 编辑crond任务
$ crontab -e -u harry
*/2 * * * * echo hello
$ crontab -l -u harry
*/2 * * * * echo hello

# 检查cron是否开机自启
$ systemctl is-enabled crond
enabled
$ systemctl is-active crond
active

2.配置 cron 作业,该作业每隔 5 分钟运行并执行以下命令:logger "EX200 in progress",以用户 natasha 身份运行

# 编辑计划任务
$ crontab -e -u natasha
*/5 * * * * logger "EX200 in progress"
$  crontab -l -u natasha
*/5 * * * * logger "EX200 in progress"

# 检查下服务状态
$ systemctl is-enabled crond
enabled
$ systemctl is-active crond
active

你可能感兴趣的:(rhce内容,linux,运维,服务器)