Linux的例行性工作—at、crontab、anacron

本文介绍了Linux中的三种定时任务管理工具:at用于一次性执行任务,crontab用于循环执行的例行工作,而anacron则在系统不定期开机的情况下保证任务执行。详细讲解了各个命令的使用方法、时间格式、权限控制以及配置文件等。

一、单一执行的执行性工作at

我们使用 at 命令来生成所要运行的工作,并将这个工作,以文本方式写入/var/spool/at/目录内,该工作便能等待 atd 这个服务的取用与执行了。

为了安全问题,不是所有人都可以进行 at 工作调度。我们可以利用/etc/at.allow和/etc/at.deny 这两个文件来进行 at 的使用限制。

/etc/at.deny里写拒绝使用at的用户
/etc/at.allow里写运行使用at的用户

查看atd程序是否在运行的命令:systemctl is-active atd

1.1 at命令的实际工作过程

1、寻找到/etc/at.allow文件存在,写在这个文件的用户才能使用at命令

2、/etc/at.allow不存在,则寻找/etc/at.deny文件,写在该文件的用户不能使用at命令

3、若两个文件都不存在,那么只有root可以使用at命令

注意:在 rhel 里面,由于假设系统上的所有用户都是可信任的,所以允许所有人使用 at 命令,/etc/at.deny 文件为空,如果你想设置拒绝某人使用 at 命令,你可将该用户写入/etc/at.deny文件

如:不允许普通用户使用at:

在这里插入图片描述

1.2 at命令详解

 命令格式:at [参数] [时间]
 -m  当任务完成之后,即使没有标准输出,将给用户发送邮件
 -l  atq的别名,可列出目前系统上面的所有该用户的at调度
 -d  atrm的别名,可以取消一个在at调度中的工作
 -v  使用较明显的时间格式,列出at调度中的任务列表
 -c  可以列出后面接的该项工作的实际命令内容
 -f  从文件中读取作业
 -rm 删除任务或rm 编号

时间格式:

      参数                           说明
     HH:MM               在今天的HH小时MM分钟执行,如果今天的这个时间点已经过了,则明天执行
 HH:MM YYYY-MM-DD      强制规定在某年某月的某一天的特殊时刻进行该工作
  now + 2 minutes       从现在开始几分钟minutes, hours, days, or weeks

例:定义一个任务,在一分钟后自动在根目录下创建一个file文件

1.交互式写法:

在这里插入图片描述

2.命令写法:

在这里插入图片描述

在这里插入图片描述

二、循环执行的例行性工作crontab

循环执行的例行性工作:每隔一定的周期就需要执行一次,crontab

循环执行的例行性工作调度是由crond这个系统服务来控制的。同样,我们也可以限制使用crontab的用户账号

1.1 crontab命令的实际工作过程

1.以账号来判别是否可使用crontab命令

 /etc/cron.allow 将可以使用crontab的账号写入其中,若不在该文件内的用户则不可使用crontab
 /etc/cron.deny 将不可以使用crontab的账号写入其中,若不在该文件内的用户则可使用crontab

2.当用户使用crontab新建工作调度之后,该项工作就会被记录到/var/spool/cron/里面

3.cron执行的每一项工作都会被记录到/var/log/cron这个日志文件中

1.2 crontab命令详解

命令格式:
crontab [选项] [file]
-u user 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo用户的 crontab 服务,此选项一般有root用户来运行,也可帮某个用户新建/删除crontab
-e      编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
-l      显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
-r      从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件
-i      在删除用户的 crontab 文件时,给确认提示。 

1.3编辑crontab:

crontab 定时任务非常简单,只需执行“crontab -e”命令,然后输入想要定时执行的任务即可。不过,当我们执行“crontab -e”命令时,打开的是一个空文件,而且操作方法和 Vim 是一致的。那么,这个文件的格式才是我们真正需要学习的内容。文件格式如下:

[root@localhost ~]# crontab -e

文件格式为:每一行为一个工作,每项工作具有六个字段

代表意义         分钟     小时     日期      月份      周      命令
数字范围         0-59    0-23     1-31     1-12     0-7    执行的命令
                                               0和7都代表周日

文件内的特殊字符:

  特殊字符          含义
  *          代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。
  ,(逗号)   代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
  -(中杠)   代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。
  /(正斜线) 代表每隔多久执行一次。比如"*/10****命令",代表每隔 10 分钟就执行一次命令。

例:

在这里插入图片描述

【例 1】让系统每隔 5 分钟就向 /tmp/test 文件中写入一行“11”

*/5 * * * * /bin/echo "11" >> /tmp/test

crontab和at命令一样,如果我们定时执行的是系统命令,那么最好使用绝对路径。

【例 2】让系统在每周二的凌晨 5 点 05 分重启一次。

5 5 * * 2 /sbin/shutdown -r now

【例 3】在每月 1 日、10 日、15 日的凌晨 3 点 30 分都定时执行日志备份脚本 autobak.sh。

30 3 1,10,15 * * /root/sh/autobak.sh

【例4】指定在2022/8/26 09:00将时间写入testmail.txt文件中

vim new1
date >> testmail.txt
at 9:00 2022-08-26 -f new1

【例5】指定在每天凌晨4:00将该时间点之前的系统日志信息备份到根目录下(/var/log/messages),备份后日志文件名显示格式logfileYY-MM-DD HH-MM

vim /etc/crontab
00 4 * * * root cp /var/log/messages /logfile`date +%F %R`;echo > /var/log/messages

使用命令来查看和删除定时任务,命令如下:

[root@localhost ~]# crontab -l
#查看root用户的crontab任务
*/5 * * * * /bin/echo "11" >> /tmp/test
5 5 * * 2 /sbin/shutdown -r now
30 3 1,10,15 * * /root/sh/autobak.sh
[root@localhost ~]# crontab -r
#删除root用户所有的定时任务。如果只想删除某个定时任务,则可以执行“crontab -e”命令进入
#编辑模式手工删除
[root@localhost ~]# crontab -l
no crontab for root
#删除后,再查询就没有root用户的定时任务了

1.4系统的crontab设置:

“crontab -e”是每个用户都可以执行的命令,也就是说,不同的用户身份可以执行自己的定时任务。但是有些定时任务需要系统执行,这时就需要编辑 /etc/crontab 这个配置文件了。

当然,并不是说写入 /etc/crontab 配置文件中的定时任务在执行时不需要用户身份,而是“crontab -e”命令在定义定时任务时,默认用户身份是当前登录用户。而在修改 /etc/crontab 配置文件时,定时任务的执行者身份是可以手工指定的。这样定时任务的执行会更加灵活,修改起来也更加方便。

在这里插入图片描述

可用下面命令来查看:

[root@localhost ~]# tail -f /var/log/messages   -查看日志文件

三、检测长期未执行的定时任务anacron

anacron 用于不能全天候开机的电脑,替代完成 cron 命令的守护进程。由于常规的计划任务通常被安排在午夜执行,如果计算机当时没有开机就不会运行这些任务。然而如果是使用anacron, 就可以确保你在下次开启电脑的时候, 任务被执行. anacron 的目的就在于运行这些计划任务,并考虑计算机关机时间。

配置文件:/etc/anacrontab
run-parts /script  --将该路径下的所有可执行文件进行运行

anacron命令的基本格式如下:

[root@localhost ~]# anacron [选项] [工作名]

在这里插入图片描述

在当前的 Linux 中,其实不需要执行任何 anacron 命令,只需要配置好 /etc/anacrontab 文件,系统就会依赖这个文件中的设定来通过 anacron 执行定时任务了。那么,关键就是 /etc/anacrontab 文件的内容了。这个文件的内容如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值