linux系统的延时任务和定时任务

一、系统的延时任务

1.at 命令
       at 命令可以指定某一任务在将来的特定时间运行。该作业可能是一次备份、对您系统的检查或者特定时间发送的通知。那些需要花费很长时间才可完成的作业正适合 at 命令。仅需使用 at 命令将任务设置为在一分钟或两分钟之后运行。然后就可以安全注销 , 因为该任务会在与 shell 会话断开连接的情况下运行
       at 命令必须指定任务应运行的时间。该指定可以是具体时间和 / 或日期( 例如星期一 , 10:00pm 或 7 月 15 日 ) 。也可以是当前时间的相对时间 ( 现在时间加上 5 分钟 , 现在时间加上 3 天或 4:00pm 加上1 周 ) 通过添加其他选项 , 您可以在任务完成是发送邮件 ( -m), 或者从文件中读取任务 ( -f 文件 ), 而无需通过标准输入进行在键入 at 命令行之后 , 按 Enter 并继续键入作业中包含的其他命令。
任务可由多个命令组成。在完成键入要运行的命令时 , 在单独出现的一行中按 Ctrl+d 完成任务

at命令的用法

at   时间            ##设定延时任务的时间,按ctrl+d表示人物提交
at   now+时间        ##与上个命令类似
at -l                ##查看所有的任务
at -c                ##查看任务详情
at -r 任务号          ##取消任务 

例如,我设置在06:13分删除mnt下的所有文件

到了06:13分以后,mnt底下的所有文件都被删除了,这就是定时任务

比如我设置延时后一分钟向文件内输入orange

在这个任务没有被执行之前,我们可以使用at -r 任务号  取消该任务

2.延时任务的黑白名单

扫描二维码关注公众号,回复: 4123316 查看本文章

黑名单:/etc/at.deny  用户名字出现在里面的不可以使用at命令

如上图所示,我把student添加到黑名单中,然后切换到student,使用student用户做一个延时任务,显示失败


白名单:/etc/at.allow这个文件是不存在的,所以使用白名单需要用户自己新建一个文件, 用户出现在里面的可以使用at命令

如果用户不在at.allow里面呢

如果at.deny和at.allow同时存在,那么优先级at.allow>at.deny,也就是说如果at.deny和at.allow里面都有student的话,student用户依旧可以创建延时任务

二、系统的定时任务

1.服务是由crond.service提供的,如果这个服务没有开启的话,那么不能使用定时任务

编辑定时任务

crontab -u root -e               ##编辑定时任务
vim /var/spool/cron/root         ##编辑定时任务,如果编辑其他用用户的定时任务,最后的文件是用户的用户名
crontab -e                       ##直接编辑当前用户的定时任务

编辑的格式如下

 *  *   *   *  *      命令      ##/2的意思就是每隔2个单位,/数字的意思就是隔多少个数字的单位 
分  时  日  月  周

例如

* * * * *                               ##每分钟执行一次
*/2 * * * *                             ##每两分钟执行一次
*/2 09,17 * * *                        ##每天的9点和17点每两分钟执行一次
*/2 09-17 * * *                         ##每天的9点到17点每隔两分钟执行一次
*/2 09-17 1,15 * 2                      ##每周二和每月的1号和15号的9点到17点都会每隔2分钟执行一次
*/2 09-17 1,15 7 2                     ##7月的每周二和每月的1号和15号的9点到17点都会每隔2分钟执行一次

这里需要注意的是,每个参数之间是一个和的关系,而不是并且的关系,在上述例子最后两条可以看出来

 查看以及取消定时任务

crontab -u root -l               ##查看定时任务的内容
cat/var/spool/cron/root          ##查看定时任务的内容
crontab -u root -r               ##取消root的定时任务,这里可以写用户的名字

一个例子 ,该定时任务就是每隔一分钟就把xupt is a good school 输入到/mnt/lei里面

2.属于系统的任务通常保存在 /etc/crontab 文件中而不是使用crontab -e 编辑保存在个人文件中。更好的做法是用文本编辑器创建 crontab 文件并保存到 /etc/cron.d 中 ( 避免更新系统软件包 cronie 时出现问题 ) 。 /etc/cron.d/crontab文件在日期说明后另加一个字段 , 表示将运行作业的用户对于需要每天、每周或每月运行一次的脚本 , 可以直接将其设置为可执行文件 , 并保存在 /etc/cron.
{daily,weekly,monthly} 中相应目录下。这些任务 /etc/anacrontab 配置的系统 anacron 服务运行anacron 是 cron 的集成组件 , 用于更好地管理作业 , 并确保在执行,也就是有一个补漏执行

例如我设置了任务,然后我关机了,过了时间以后,我在开机,这个任务就会被立刻执行

vim /etc/cron.d/file 	#file任意名称
* * * * *	username 	action
* * * * * 	root	     rm -rf /mnt/*

3.定时任务的黑白名单
 黑名单:/etc/cron.deny  用户名字出现在里面的不可以使用crontab命令


 白名单:/etc/cron.allow这个文件是不存在的,所以使用白名单需要用户自己新建一个文件, 用户出现在里面的可以使用crontab命令


 如果cron.deny和cron.allow同时存在,那么优先级at.allow>at.deny,也就是说如果cron.deny和cron.allow里面都有student的话,student用户依旧可以创建定时任务

三、系统中的临时文件

系统中服务在正常运行时会产生临时文件,在系统中 /usr/lib/tmpfiles.d/

下面用一个例子来加深理解,如何清理系统中的临时文件

1.我在/usr/lib/tmpfiles.d/下新建一个文件xupt.conf

配置文件具体的格式为

      d          /mnt/xupt    777    root       root          1min
表示类型为目录        目录路径   权限  所属用户   所属用户组 存在多长时间会被清理

2.运行指令

systemd-tmpfiles.d --create /usr/lib/tmpfiles.d/xupt.conf       ##运行完会发现创建了目录

3.然后间隔1分钟在mnt/xupt下创建两个文件

4.运行命令,就会发现存在已经超过一分钟的lei1已经被清理了,而lei2没有被清理

systemd-tmpfiles.d --clean /usr/lib/tmpfiles.d/xupt.conf  ##清理了在mnt/xupt下存在超过一分钟的文件

猜你喜欢

转载自blog.csdn.net/weixin_40543283/article/details/83745399