一、单一执行的执行性工作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 文件的内容了。这个文件的内容如下:

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

被折叠的 条评论
为什么被折叠?



