我们有时候会发现系统常常会主动的执行一些任务,那么我们该怎样让系统自动执行我们所设定的任务?我们又怎样让系统提示自己在某个重要时刻要做的事情?这些对于任务的设置,让我们一起来看看吧!
一、定时任务
要使用单一计划任务时,也就是定时任务,我们的Linux系统上面必须要有负责这类计划任务的服务,那就是atd服务。不过并非所有的linux发行版都默认启动,所以,某些时刻我们需要自己启动。
systemctl start atd ##开启atd服务
systemctl enable atd ##开机启动
1. 定时任务的创建
我们可以使用at这个命令来产生所要运行的任务,并将这个任务以文本文件的方式写入/var/spool/at目录内,该任务便能等待atd这个服务的使用与执行了。
at 9:00 ##在该时间执行的任务
>touch /mnt/file{1..3} ##使用ctrl+d可以结束输入
at now+1min ##设置1分钟后执行定时任务
建立一个对目录的监控方便我们查看任务是否执行【watch -n 1 ls -l /mnt/*】
2. 定时任务的管理
at -l ##查看已设定的定时任务
at -c 序列号 ##查看该序列号的定时任务
at -r 序列号 ##删除该序列号的定时任务
3. 定时任务黑白名单
系统默认会保留一个定时任务黑名单,我们可以在里面添加用户。默认情况下,所有用户都可以创建定时任务。
工作流程:
第一步:先找寻/etc/at.allow这个文件,写在这个文件中的用户才能使用at,没有在这个文件中的用户则不能使用at(即使没有写在at.deny中)。
第二步:如果/etc/at.allow不存在,就查找/etc.deny这个文件,写在这个at.deny中的用户则不能使用at,没有在这个at.deny文件中的用户,就可以使用at。
第三步:如果两个文件都不存在,那么只有root可以使用at这个命令。
(1)用户黑名单
vim /etc/at.deny ##黑名单,名单中的用户不能使用定时服务
(2)用户黑名单
vim /etc/at.allow ##白名单,名单中的用户可以使用
## at.allow文件存在时,at.deny不生效
一般情况下,用户白名单是不存在的,需要创建touch /etc/at.allow
二、延时任务
cron设备管理必须定期重复运行的程序。后台程序crond每分钟唤醒一次,以运行计划的任何任务,用户使用crontab命令计划个人任务。系统管理员可以在系统范围配置文件中设置任务 单个用户使用称为 crontab(cron表)的文本文件登记任务。
当用户使用crontab这个命令来建立计划任务之后,该项任务就会被记录到/var/spool/cron中,而且是以账号来作为判断根据的。
1. 延时任务的创建和管理
crontab -e -u root ##创建延时任务
## 在文件中输入 * * * * * touch /mnt/file{1..10} ##时刻创建文件
crontab -l -u root ##列出已有的任务
crontab -r -u root ##删除任务
cat /var/spool/cron/root ##查看某一用户的延时任务
在我们做实验时可以建立一个监控,方便我们查看实验效果【watch -n 1 ls -l /mnt/*】
注意:每项任务都具有六个字段,这六个字段分别代表:
代表意义 | 分钟 | 小时 | 日期 | 月份 | 周 | 命令 |
数字范围 | 0~59 | 0~23 | 1~31 | 1~12 | 0~7 | 需要执行的命令 |
其中,比较特殊的是周,周的数字为0或7时,都代表星期天
特殊字符 | 代表意义 |
*(星号) | 每时每刻 |
,(逗号) | 分隔时段 |
-(减号) | 一段时间范围内 |
/n(斜线) | 每隔n单位间隔 |
2. 延时任务黑白名单
(1)延时任务黑名单
vim /etc/cron.deny ##在名单中的用户不能使用crontab
root用户可以指定普通用户创建延时任务,但该用户自己不能使用
在超级用户身份下给某一用户指定延时任务crontab -e -u tom
(2)延时任务白名单
vim /etc/cron.allow ##在名单中的用户可以使用
注意:cron.allow文件存在,则cron.deny不生效
三、自动执行延时任务
当命令过多时,可创建一个命令执行目录
vim westos
在westos文件中输入:
* * * * * root run-parts /westos ##run-parts 自动执行指定目录
mkdir /westos ##执行目录
vim /westos/test.sh ##自动执行的脚本
在test.sh文件中输入:
#!bin/bash
touch /mnt/file{1..3} ##执行的语句
当我们需要执行的任务过多时,由于每项任务都有六个字段,多个任务,在书写时比较麻烦且容易出错,我们通过对其他自动执行文件的学习,了解了一些自动执行延时任务书写格式,通过这些例子,我们可以将我们所需要执行的任务放到一个目录中,执行任务时,系统会根据指定的目录,进行任务自动的执行。
我们在指定目录中创建一个自动执行脚本,可以使它自动执行,由于该脚本的权限中没有执行权利,我们需要手动添加执行权限,如果不加执行权限,等到明天它也不会有反应。
四、系统定期清理临时文件管理方式
我们的系统每天都会帮我们做一些工作,这些工作都是自动执行的。比如说自动的执行在线更新、自动的做日志文件分析等。这是由于系统要正常运行 的话,某些后台的任务必须要定时执行。那么我们该怎样也创建一个可以让系统定时定期执行的文件?
监控: watch -n 1 ls -lR /mnt/
cd /usr/lib/tmpfiles.d/ ##切换到自动执行目录
vim westos.conf ##在该目录下,创建自动执行的文件
d /mnt/westos 777 root root 10s ##创建的文件10s后会被清理
systemd-tmpfiles --create /usr/lib/tmpfiles.d/* ##系统自动执行该目录下的文件
systemd-tmpfiles --clean /usr/lib/tmpfiles.d/* ##清理过期的文件
touch /mnt/westos/file1
我们会发现,未过期的文件,使用clean命令不会被清理,过期后,会被清理
建立监控,观察文件的变化【watch -n 1 ls -lR /mnt/】
我们在指定目录创建文件,这些文件在创建后的10s会过期,观察系统会不会帮我们清理过期文件,由于使我们自己创建的文件,我们需要让系统识别这些文件,识别之后,使用清理命令,系统会将过期文件自动清除。