Linux系统中的定时任务及延时任务详解

Posted 是大姚呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统中的定时任务及延时任务详解相关的知识,希望对你有一定的参考价值。

Linux系统中的定时任务及延时任务

1、系统延时任务

at 23:37/now+1min 		##设定任务执行时间/延时1分钟
at> rm -fr /mnt/* 		##任务动作
at> <EOT> << CTRL +D 	##用ctrl+D发起任务

at -l 					##查看任务列表
at -c 任务号 			##查看任务内容
at -r 任务号 			##取消任务执行

实验步骤:
1)设定在5:56时在/mnt目录下建立文件,通过watch -n 1 ls -lR /mnt进行监控,可以看到延时任务执行
在这里插入图片描述
2)设定延时1分钟清空/mnt目录下所有文件
在这里插入图片描述
3)注意: 当延时任务有输出时,输出会以邮件的形式发送给at任务的发起者,为了看到发送的邮件,我们需要用到提供邮件发送服务的postfix和提供邮件查看服务mailx,配置虚拟机westosa的软件源指向文件(这里使用真实主机中的软件仓库),安装postfix和mailx,启动postfix服务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4)设定延时任务输出hello yao ,mail -u root查看超级用户邮件,可以看到超级用户接收到的定时任务发送来的邮件,邮件内容为hello yao,清空邮件(& 1表示查看第一封邮件;& q表示退出)
在这里插入图片描述

2、at任务的黑白名单

at任务的黑名单/etc/at.deny : 系统中默认存在,在此文件中出现的用户不能执行at命令
at任务的白名单/etc/at.allow: 系统中默认不存在,当该文件出现,普通用户不能执行at命令,只有在名单中的用户和超级用户可以执行at命令,并且黑名单/etc/at.deny失效

实验步骤:
1)添加普通用户lee, 切换到lee、westos用户分别执行at命令,此时lee和westos用户都可以执行
在这里插入图片描述
2)编辑at任务的黑名单/etc/at.deny ,在其中添加用户lee, 切换到lee,此时lee不能执行at命令
在这里插入图片描述
3)查看at任务的白名单/etc/at.allow,显示系统中不存在该文件,建立并编写该文件,在其中添加用户lee, 切换到lee,此时lee可以执行at命令,黑名单/etc/at.deny失效;超级用户也可以执行at命令;再切换到不在该名单内的普通用户westos,westos不能执行at命令
在这里插入图片描述

3、系统定时任务

a)定时任务crontab服务
系统中控制定时任务crontab的服务为crond.service ,当这一服务开启时定时任务生效,系统中某用户设定的定时任务都保存在/var/spool/cron/username这一任务保存文件中。
b)crontab 时间表示方式
定时任务保存文件/var/spool/cron/username中,crontab 时间表示方式如下:

* * * * * 					##每分钟
*/2 * * * * 				##每两分钟
*/2 09-17 * * * 			##早7-晚5点内每两分钟
*/2 */2 * * * 				##每隔2小时每两分钟
*/2 09-17 3,5 1 5 			##1月份3号和5号,每周周五,早9-晚5点,每两分钟 
*/2 09-17 * * 5 			##每周周五早9-晚5点每两分钟

c)crontab 命令

crontab -e -u				##建立指定用户的定时任务
crontab -l -u				##列出指定用户的定时任务列表
crontab -r -u				##取消指定用户的定时任务执行

实验步骤:
1)建立超级用户的定时任务,在/mnt目录下建立文件,通过watch -n 1 ls -lR /mnt进行监控,可以看到定时任务执行在这里插入图片描述
2)注意: 和延时任务一样,当定时任务有输出时,输出会以邮件的形式发送给crontab的发起者
在这里插入图片描述
在真正执行延时 / 定时任务的时候,系统每执行一次就会发送一次邮件,这显然是不合理的,而且会浪费系统存储空间,我们可以通过以下两种方法避免接收邮件:
方法一:屏蔽定时任务的输出
在定时任务中将输出直接放入垃圾箱,此时crontab的发起者不会接收到邮件
在这里插入图片描述
在这里插入图片描述
方法二:关闭邮件发送功能
编辑/etc/sysconfig/crond配置文件,进行如下图所示设定,关闭邮件发送功能,查看邮件,重启定时任务crontab服务crond.service后再次查看邮件,邮件数量不变,即crontab的发起者不会接收到有输出的定时任务发送的邮件
在这里插入图片描述
在这里插入图片描述

4、系统级别的cron(文件方式设定定时任务)

上述crontab命令是用户级别的定时任务设置方式,我们还可以通过在自定义定时任务目录/etc/cron.d/下编写文件,以文件方式设定系统级别的定时任务。文件内容编写格式示例如下:

* * * * * username  action
* * * * *   root    rm -fr /mnt/*

实验步骤:
1)在/etc/cron.d/目录下编写系统级别的定时任务文件westos(文件名称任意),设定每分钟删除/mnt目录下所有文件的定时任务,通过watch -n 1 ls -lR /mnt进行监控,可以看到定时任务执行
在这里插入图片描述
在这里插入图片描述
2)查看定时任务服务crond.service的状态,在/mnt目录下新建文件,可以通过anacron命令查看定时任务是否漏执行,可以看到定时任务成功执行,/mnt目录下文件被清空
在这里插入图片描述
在这里插入图片描述

5、crontab的黑白名单

crontab的黑名单/etc/cron.deny: 系统中默认存在,在此文件中出现的用户不能执行crontab
crontab的白名单/etc/cron.allow: 系统中默认不存在,当文件出现,普通用户不能执行crontab,只有在名单中的用户可以执行crontab,并且黑名单/etc/cron.deny失效
注意: 这两个名单都不会影响/etc/cron.d/目录中定时任务的发起及执行

实验步骤:
1)编辑crontab的黑名单/etc/cron.deny ,在其中添加用户lee, 切换到lee,此时lee不能执行crontab;切换到不在黑名单中的普通用户westos,此时westos可以执行crontab
在这里插入图片描述
2)查看crontab的白名单/etc/cron.allow,显示系统中不存在该文件,建立并编写该文件,在其中添加用户lee, 切换到lee,此时lee可以执行crontab,黑名单/etc/cron.deny失效;超级用户也可以执行crontab;再切换到不在该名单内的普通用户westos,westos不能执行crontab
在这里插入图片描述

6、系统临时文件的管理方式

系统临时文件是指在系统执行程序的过程中需要使用、程序运行完成后不需要保存应该被清理的文件,我们可以通过在临时文件配置目录/usr/lib/tmpfiles.d/中编写配置文件,结合systemd-tmpfiles命令清理系统中的临时文件。

实验步骤:
1)在临时文件配置目录/lib/tmpfiles.d/下编写配置文件westos.conf,systemd-tmpfiles --create使得配置文件westos.conf生效,即在/mnt中建立一个存放临时文件的目录westos,该目录下的临时文件建立完成8秒后可以被清理
在这里插入图片描述
在这里插入图片描述
2)在/mnt/westos目录下创建临时文件,8秒后systemd-tmpfiles --clean即可清理这些临时文件,我们可以将systemd-tmpfiles --createsystemd-tmpfiles --clean写入定时任务crontab里,这样系统就能够自动执行清理临时文件的任务
在这里插入图片描述

以上是关于Linux系统中的定时任务及延时任务详解的主要内容,如果未能解决你的问题,请参考以下文章

Linux中的定时和延时任务

《Linux菜鸟入门2》系统定时延时任务

系统延时及定时任务

系统定时任务及延时任务

系统定时任务及延时任务

系统定时任务及延时任务