文章目录
- 一、学习内容总结
- 1、单一执行的例行性工作at
- 2、循环执行的例行性工作crontab
- 二、作业
- at和crontab的使用
一、学习内容总结
1、单一执行的例行性工作at
**概念:**指仅处理执行一次就结束了的工作。
要使用单一工作调度时,linux上面需要有负责这个调度的服务atd。我们使用at命令来生成所要运行的工作,并将这个工作以文本方式写入/var/spool/at/目录内,该工作便能等待atd这个服务的取用与执行了。
为了安全问题,不是所有人都可以进行at工作调度。我们可以利用/etc/at.allow和/etc/at.deny这两个文件来进行at的使用限制
工作过程:
先寻找/etc/at.allow这个文件,写在这个文件的里面用户才能使用at命令;如果/etc/at.allow不存在,就寻找/etc/at.deny这个文件,写在该文件的用户不能使用at命令;如果两个文件都不存在,那么只有root可以使用at命令。
在rhel里面,由于假设系统上的所有用户都是可信任的,因此系统会保留一个空的/etc/at.deny文件,意思是允许所有人使用at命令,如果想设置拒绝某人使用at命令,可将该用户写入/etc/at.deny(格式为一行代表一个用户)
命令格式: at [-mldv] TIME
-m:当at的工作完成后,即使没有输出信息,以email通知用户该工作已完成
-l:at -l相当于atq,列出目前系统上面的所有该用户的at调度
-d:at -d相当于atrm,可以取消一个在at调度中的工作
-v:可以使用较明显的时间格式列出at调度中的任务列表
-c:可以列出后面接的该项工作的实际命令内容
-f:从文件中读取作业
atq可以查看目前主机上有多少的at工作调度
atrm可以删除某项at工作调度
TIME 定义执行这项工作的时间
格式:
HH:MM表示在今天的HH小时MM分钟执行,如果今天的这个时间点已经过了,则明天执行
at举例:
定义三分钟之后显示hello
at now + 3 minutes
进入at终端输入要执行的命令,最后按Ctrl+d结束终端
2、循环执行的例行性工作crontab
**概念:**指每隔一定的周期就需要执行一次的工作。
循环执行的例行性工作调度是由crond这个系统服务来控制的。同样也可以限制使用crontab的用户账号。
/etc/cron.allow 将可以使用crontab的账号写入其中,若不在该文件内的用户则不可使用crontab。
/etc/cron.deny 将不可以使用crontab的账号写入其中,若不在该文件内的用户则可使用crontab。
当用户使用crontab新建工作调度之后,该项工作就会被记录到/var/spool/cron/里面,并且是以账号来判别的。cron执行的每一项工作都会被记录到/var/log/cron这个日志文件中。
命令格式:crontab [-u user] [-l | -r | -e]
-u:只有root才能进行这个任务,帮某个用户新建/删除crontab
-e:编辑crontab的工作内容
-l:查阅crontab的工作内容
-r:删除所有的crontab的工作内容
crontab格式说明:
每一行为一个工作,每项工作具有六个字段。
代表意义 | 分钟 | 小时 | 日期 | 月份 | 周 | 命令 |
---|---|---|---|---|---|---|
数字范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 | 执行的命令 |
其中周的0和7都代表周天
特殊字符 | 含义 |
---|---|
* | 代表任何时刻 |
, | 代表分隔时段 |
- | 代表一段时间范围 |
/数字 | 指定时间的间隔频率,例如每3分钟进行一次,*/3 |
系统的例行性任务
[root@localhost ~]# vim /etc/crontab
SHELL=/bin/bash #运行计划所使用的shell 默认是bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin #指定命令执行环境变量路径
MAILTO=root #MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户
* * * * * user-name command to be executed
user-name表示执行命令的用户是谁
当需要同一时间执行多个脚本时,可以将这多个脚本放在一个目录下,然后使用run-parts来执行。
run-parts:该命令可将后面接的“目录”内的所有文件找出来执行。
可唤醒停机期间的工作任务
anacron 可以处理关机状态时未执行的计划任务,anacron不能指定何时执行某项任务,而是以天为单位或是在开机后立刻进入anacron的操作(/etc/anacrontab)。
它会去检测停机期间应该进行但是并没有进行的crontab任务,并将该任务执行一遍,然后anacron就会自动停止了。
二、作业
at和crontab的使用
1、cron的使用:
每月1、10、22日的4 : 45pm 执行重启 httpd的任务:systemctl resetart httpd
[root@qingyuxin ~]# crontab -e
45 16 1,10,22 * * systemctl restart httpd
也可以写在/etc/crontab 文件中,指定用户执行该工作
2、at的使用
在2023年的3月21日下午4点 执行将date命令的输出写入到文件/root/date.txt
[root@qingyuxin RHCE]# touch /root/date.txt
[root@qingyuxin RHCE]# at 16:00 2023-03-21
at> date > /root/date.txt
at> <EOT>