目录
一.单一执行的例行性任务--at (一 次性)
1.1安装
●at命令- -般会默认安装在系统中,通过下列命令查看版本号
[root@server ~]# at -V
at version 3.1.23
●查看执行的状态
[ root@server ~]# systemctl status atd #查看状态
[root@server ~]# systemctl enable --now atd #开机启动并当前立刻启动
1.2参数
at + 参数
-l: 列出系统中所有用户的at任务<=> atq
-d :删除或取消一个任务<=>atrm
-v :使用时间格式累出at任务
-C :可以列出任务后的命令内容
-f:从文件中读取
1.3示例2
●不使用交互命令实现at任务
[root@server ~]# echo "echo 'he1lo again' >> at.txt"| at now +1
minute^C
[ root@server ~]# cat at. txt
1.4时间格式
参数 说明
HH:MM 在今天HH小时的MM分钟执行,若时间错过则在明天执行
HH:MM YYYY-MM-DD 规定在某年某月某日的特殊时间执行
now + 2 mintues<br>
now + 3 hours <br>
now +数字时间单词
now +4 days<br>
now +5 weeks
1.5注意
●at命令只要指定的时间正确,就可以执行对应的命令
●at命令的输出结果不会显示到屏幕.上
●at命令中执行的命令最好使用绝对路径,不容易报错
●过程:输入at时间->回车->输入执行的命令->ctrl+d退出at
at命令只会执行一次.
1.6at命令执行过程分析
●第一步:寻找/etc/at.allow (白名单)是否存在,写在该文件中用户才可执行at命令
第二步:若/etc/at.allow不存在,则寻找/etc/at.deny(黑名单)文件,写在该文件中的用户不能使
用at命令
●第三步:若两个文件都不存在则只有root用户可以使用at命令
●注意:若拒绝某用户使用at命令则可以将用户名写入到/etc/at.deny中
将redhat用户添加到白名单中
[root@kittod ~ ]# echo redhat >> /etc/at.allow
二.循环执行的例行性任务--crontab (周期性)
2.1.crontd服务
●at命令是在指定的时间只能执行一-次任务,crontab命令可以循环重复的执行定时任务,与
Windows中的计划任务有些类似
●crond是Linux下用来周期地执行某种任务或等待处理某些事件的一一个守护进程,在安装完成操
作系统后,默认会安装crond服务工具,且crond服务默认就是自启动的,若需要安装则执行
如下命令:
[root@server ~]# yum install crontabs # 安装
[ root@server ~]# systemctl status crond
#查看状态
crond进程每分钟会定期检查是否有要执行的任务,如果有,则会自动执行该任务,crontab
命令需要crond服务支持
●linux任务调度的工作主要分为以下两类:
。系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
。个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,
这些工作可由每个用户自行设置
2.2.crontab工作过程
●当系统中有/etc/cron.allow文件时,只有写入此文件的用户可以使用crontab命令,没有写
入的用户不能使用crontab命令。同样,如果有此文件, /etc/cron.deny 文件会被忽略,因为
/etc/cron.allow文件的优先级更高
当系统中只有/etc/cron.deny文件时,写入此文件的用户不能使用crontab命令,没有写入文
件的用户可以使用crontab命令
●crontab执行的每- -项工作都会被记录到lvar/log/cron这个日志文件中
●当用户使用crontab新建工作之后,该项工作就会被记录到/var/spool/cron/目录里面
2.3.crontab命令详解
2.3.1格式
crontab [-u user] [-1| -r | -e]
2.3.2.参数
参数 说明
-U 只有root才能执行该任务
-e 编辑crontab工作内容
-| 查询crontab任务内容
-r 删除cronatb任务
2.3.3.编辑crontab
●格式
crontab -e .
●注意:写入的命令一行- -个命令,每行共6段:时间命令
●时间共5段,意义如下:
●注意:写入的命令- -行一 个命令,每行共6段:时间命令
●时间共5段.意义如下:
表示意义 分钟 小时 日期 月份 星期
数字范围 0-59 0-23 1-31 1-12 0-7 (0和7都表示星期日)
2.3.4.特殊字符
* 任意时刻
- 表示范围
(逗号) 分割时段
4*/数字 指定时间间隔频率,如:每3分钟执行一-次:*/3
2.3.5.时间描述示例
12* * * 每天凌晨2点1分执行动作
017**1: 每周一下午17点整执行动作
0 5 1,15 * * 每月1日和15日凌晨5点执行动作
404**1-5 每周一至周五凌晨4点40分执行动作
*/104 *** 每天凌晨4点每隔10分钟执行动作
3,15 8-11 */2 * * : 每隔2天上午8-11点的第3分钟和第15分钟执行动作
***** 每隔1分钟执行动作
2.3.6.实验1
●编写脚本test.sh
#!/bin/bash
while :
do
echo "this is my test sh"$(date) >> / root/cro. txt
sleep 1
done
●设置周期性的计划任务
[root@server ~]# crontab -e
*/1 * * * * /bin/bash / root/test. sh
注意:符号之间存在空格
●注意: crond服务会自动启动, crontab命令只要保存就会生效
●查看任务
[root@server ~]# crontab -1
*/1****/bin/bash /root/test.sh
●删除任务
[root@server ~]# crontab -r
[root@server ~]# crontab - 1
no crontab for root
●此实验需要终止循环进程
[root@server ~]# ps -aux | grep test #查看已存在的test进程
[root@server ~]# ki11 -9 进程号
#强制终止
2.3.7.实验2
让系统每周1凌晨6点重启一-次
[ root@server ~]# crontab -e
**1 /sbin/shutdown -r now
2.3.8安装邮件服务
[root@server ~]# yum install s-nail -y
●配置邮件服务
[root@server ~]# vim /etc/s-nail.rc
set from=17674044@qq . com
set smtp= smtp. qq. com
set smtp- auth-user=17674044@qq . com
set smtp- auth- password=do* ** *vqdubqbi bj
set smtp-auth=login
#注意:文件配置完毕需要强制保存并退出,末行模式下输入wq!
●测试一下邮件服务
[ root@server ~]# echo "testmail"I mail -S "testmail" 17674044@qq . com
●设置周期性的任务,每隔1分钟发送邮件
[root@server ~]# crontab -e
MAILTO=17674044@qq. com
*****echo "警告, server服务器内存较低,请速处理." | mail -v -s
"告警邮件" 17674044@qq . com
2.3.9.书写定时任务的注意事项
●6个字段都不能为空,如果不确定则使用*表示任意时间
●crontab命令任务的最小时间单位为分钟,最大有效时间为月,如: 2024年某时执行、3点30分
30秒这样的时间日期无法被识别
定义时间时,日期和星期最好不要- -起出现, 由于都是以天为单位,非常让管理员混淆
●在定时任务中不能,不管是写命令还是在脚本中写命令,最好都用绝对路径,相对路径有时会报
错
2.4.0实验4
每天6:00将日志文件/var/log/messages文件进行备份,备份到/backup目录中, 备份时
需要将文件名修改为logfileYYYY-MM-DD-HH:MM:SS
[ root@server ~]# mkdir /backup
[root@server ~]# vim /etc/crontab 注意:下面的root前面的符号之间存在一个空格
0 6 * * * root /usr/bin/cp /var/log/messages /backup/logfile date +\%Y-\%m- \%d-\%H: \%M:\%S
#注意
#反引号’:表示将引起的内容识别为命令
#在crontab中%表示换行, 需要增加转义符\进行转义
2.4.1系统级别的计划任务
●crontab -e时每个用户都可以执行的命令,但有时定时任务必须由系统执行,此时就需要编
辑/etc/crontab配置文件来实现
●主配置文件:
[root@server ~]# vim /etc/crontab
●仅能通过root定义,不可以使用普通账户身份去执行计划任务
●方法:在/etc/crontab最后- -行新增计划任务即可
SHELL=/bin/bash
PATH=/sbin: /bin:/usr/sbin:/usr/bin
MAILTO=root
2.4.2` `符号的使用
` `:反引号:输出命令的执行结果,而不是命令本身