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 --create
和systemd-tmpfiles --clean
写入定时任务crontab里,这样系统就能够自动执行清理临时文件的任务
以上是关于Linux系统中的定时任务及延时任务详解的主要内容,如果未能解决你的问题,请参考以下文章