在Linux系统中,存在两种工作调度的方式,一种是例行性的,固定在某一个时间点执行什么任务,这种调度是永久的,也就是计划定期任务调度;另外一种为突发性的,就是这次做完以后就没有的那一种,也就是延迟任务调度。
1 延时任务(一次性)
1.1 at基本操作命令
at是个可以处理仅执行一次就结束调度的命令,要执行at,必须要有atd这个服务。at命令的基本语法为:
at+发起任务的时间 然后输入要操作的令名
ctrl+d 执行任务
at -l 查看任务队列
at -c 2 根据数字查看任务队列中任务2的内容
at -r 2 删除任务2
at now+2min 从当前时刻记时,两分钟之后执行任务
1.2 at命令的用户白黑名单
/etc/at.deny 任务的黑名单,在此名单中的用户不能使用at创建任务
/etc/at.allow 任务的白名单,默认白名单不存在,可以自行创建,当白名单存在,黑名单就不起作用不会被读取
只要存在白名单 必须在白名单内的才能执行(不包括超户)
任务的黑名单
任务的白名单
2 计划定期任务
systemctl status crond.server 为定时任务的服务。cron设备管理必须按计划定期重复运行的程序。后台程序crond每分钟唤醒一次,以运行计划的任何用户使用crontab命令计划个人任务。系统管理员可以在系统范围配置文件中设置任务。
单个用户使用称为crontab(cron表)的文本文件登记任务
2.1 crontab命令:
crontab -l 列出文件
crontab -r 删除文件
crontab -e 编辑文件
crontab -e 使用默认编辑器vi
crontab -e -u root 编辑用户root的定时任务,-u 表示身份
crontab -l -u root 查看用户root的定时任务
crontab -r -u root 删除用户root的定时任务
定时任务存储的文件所在:/var/spool/cron/root 若将该文件删除,则root用户的定时任务也将被删除
首先,使用man 5 crontab查看定时任务怎么来写呢?
分 时 日 月 星期
* * * * * 每分钟都执行一次
*/2 * * * * 每两分钟执行一次
*/2 09-17 * * * 每09-17点的两分钟执行一次
*/2 09,17 * * * 在九点和下午五点这两个小时每两分钟执行一次
*/2 09-17 1 * * 每1号的九点到五点的两分钟执行一次
*/2 09-17 1 3 4 3月的每个周四和3月的1号在九点到下午五点每隔两分钟执行一次
接下来,使用crontab为用户建立计划定期任务
2.2 定时任务的用户白黑名单:
执行任务的权限:
vim /etc/cron.deny 执行任务的黑名单
但是当你是超户,crontab -e -u student 可以操作,因为是超户指定用户去做
但是黑名单中的用户本身不能去做
vim /etc/cron.allow 执行任务的白名单
用户黑名单
用户白名单
3 编辑系统中定时任务的脚本
系统中会有定时任务的脚本,在脚本中规定什么时间执行什么操作。在/etc/cron.d 这个文件中存在0hourly,raid-check, sysstat 这些脚本,系统会定时去执行脚本中的任务。
我们同样可以自己创建系统定时执行的脚本
在/etc/cron.d目录下:
1.脚本中执行少数命令:
vim westos
* * * * * root rm -fr /mnt/* 写入想要定期执行的任务
2.如果有很多条命令 可以写成脚本指定一个目录去执行(该语句同样在/etc/cron.d写入)
* * * * * root run-parts /redhat
mkdir /redhat
cd /westos
vim test.sh
#! /bin/bash touch /mnt/file{1..10}
chmod +x test.sh 给脚本执行权限
编辑指定目录下的定时任务的脚本
/redhat目录下的脚本被执行
/etc/cron.d目录下westos文件中的定时任务语句被执行
4 系统的临时文件服务
系统的临时文件服务为systemd-tmpfiles ,配置文件在: /usr/lib/tmpfiles.d/
cd /usr/lib/tmpfiles.d/
vim westos.conf 建立临时文件
d /mnt/westos 777 root root 10s 建立的/mnt/westos目录生命周期为10s
systemd-tmpfiles --create /usr/lib/tmpfiles.d/* 会自动读取该目录下的全部文件
当文件超出生命周期时:systemd-tmpfiles --clean /usr/lib/tmpfiles.d/* 清理该目录下的全部已经超出生命周期的文件
当文件没有超出生命周期,将不能被清理掉
########################The End####################################