【讲清楚,说明白!】计划任务crontab及企业实战应用

目录:
(一)at计划任务
(二)crontab计划任务
(三)清理临时文件



经验丰富的系统运维工程师可以使得Linux系统在无需人工介入的情况下,在指定的时间段自动启动或停止某些服务或命令,从而实现运维的自动化。尽管我们现在已经有了功能强大的脚本程序来执行一些批处理工作,但是如果仍然需要在每天凌晨两点敲击键盘回车键来执行这个脚本程序,这简直太痛苦了。所以这就使得我们能掌握如何设置服务器的计划任务服务的方法,并拥有把周期性,规律性的工作交给系统自动完成的技能显得尤为重要。
计划任务分为一次性计划任务与周期性计划任务。例如公司人事写了一封放假邮件,计划是在放假前最后一个工作日的上午10点发送全体员工,此时我们所需要的就是一次性计划任务。再如数据库管理员需要在每天凌晨2点对业务数据库进行备份,此时我们所需要的就是通过周期性计划任务解决这个需求。
(一)at计划任务
(1.1)at是属于一次性计划任务,顾名思义,一次计划任务只执行一次,一般用于满足临时的工作需求。我们可以使用at命令实现这种功能,只需要写成“at 时间”的格式就可以了。如果想要查看已设置好但还未执行的一次性计划任务,可以使用“at -l”命令;想要将其删除,可以使用“atrm 任务序号”。在使用at命令来设置一次性计划任务时,默认采用的是交互式方法。
(1.2)第一个使用“atq”或者“at -l”可以来查看当前系统中所有的计划任务的列表情况。
# atq
# at -l

(1.3)对于at命令的用法,我们可以通过“man at”命令来查看。现在我们的需求是创建一个2019年10月27日的计划任务(当前是26日),则我们可以查询到符合自己使用习惯的日期表示方式,比如编辑在10月27日执行重启httpd服务的计划任务。需要注意的是,我们当前的时间是几点,那么创建的计划任务所执行的时间,也就是我们所指定的那个日期与当前的时间点一致的时候执行。因为我们是在2019年10月26日的20点01分创建的计划任务,所以计划任务执行的时间是2019年10月27日的20点01分。
# at 2019-10-27
at> systemctl restart httpd


(1.4)在创建指定时间的计划任务时,我们也是可以指定具体的时间的,精确到时、分。
# at 22:00 2019-12-12---创建一个计划任务,设定在2019年12月12日22:00分执行
# at 4pm 2019-12-12---创建一个计划任务,设定在2019年12月12日下午4点执行

(1.5)如果我们想指定3周后下午4点执行重启http服务的指令,则可以使用weeks参数;如果我们想要3天后的上午4点执行重启http服务的指令,则可以使用days参数;如果我们想指定2个小时后执行重启http服务的指令,则可以使用hours参数;如果我们想指定1小时后执行删除/root/目录下所有以rpm为后缀的文件,则可以使用minutes参数。
# at 4pm + 3weeks
at> systemctl restart httpd
# at 4am + 3days
# at now + 2hours
# at now + 1minutes
at> rm -rf /root/*rpm

(1.6)如果我们想查询具体的计划任务的信息,可以使用两种方式进行查看,第一种是使用“at -c”命令查询(图1-6和图1-7);第二种是进入到/var/spool/at目录下进行查看计划任务的具体内容(图1-8和图1-9)。
# at -c 1
# cd /var/spool/at




(1.7)如果我们现在需要将多余的计划任务删除,则可以使用“atrm”命令或者是“at -d”命令。如果我们希望批量删除指定的计划任务,则可以使用
# atrm 1---删除第一个计划任务
# at -d 2---删除第二个计划任务
# atrm {3..6}---删除第3到第6个计划任务


(1.8)默认情况下,系统中的普通用户是可以执行计划任务的。如果我们现在需求是希望不允许普通用户执行计划任务,则可以在/etc/at.deny文件中添加用户,例如我们不允许tom用户查询和创建计划任务,则可以参考图1-12。此时tom用户已经是不允许创建和查询计划任务了,而我们现在又希望tom用户能够创建个查询计划任务,我们可以使用两种方式来实现,第一种是把tom用户从/etc/at.deny文件中删除;第二种方式是我们创建一个/etc/at.allow文件,并将tom用户添加进去,由于系统默认当同一用户同时存在/etc/at.allow和/etc/at.deny文件的时候,是/etc/at.allow文件中的设置生效(图1-13)。
# vim /etc/at.deny
# vim /etc/at.allow



(二)crontab计划任务
(2.1)如果我们希望Linux系统能够周期性的、有规律的执行某些具体的任务,那么Linux系统中默认启用的crond服务简直再合适不过了。创建、编辑计划任务的命令为“crontab -e”,查看当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为“crontab -r”。另外,如果您是以管理员的身份登录的系统,还可以在crontab命令中加上-u参数来编辑他人的计划任务。
(2.2)如果我们想查询当前用户在系统中存在的计划任务可以使用“crontab -l”,如果我们想查询tom用户在系统中存在的计划任务可以使用-u指明用户。
# crontab -l---查询当前用户在系统中存在的计划任务
# crontab -l -u tom---查询tom用户在系统中存在的计划任务

(2.3)如果我们想要编辑当前用户的计划任务,则可以使用“crontab -e”,如果想要对指定的用户编辑计划任务,则应该再加上“-u”的选项(图2-3)。我们在正式部署计划任务之前,需要先默念一下口诀“分、时、日、月、星期、命令”,这是使用crond服务设置任务的参数格式,需要注意的是,如果有些字段没有设置,则需要使用星号(*)占位。例如我们现在的需求是计划在每天上午7点整执行一个脚本DeleteLock.sh,目标是查找到/mail分区下所有后缀为“.lock”的文件,并将这些文件清除(图2-4至图2-6)。
# crontab -e -u tom---指定对tom用户创建一个计划任务
find /mail -type f -name "*.lock" -exec rm -rf {} \;---查找到/mail分区下所有后缀为“.lock”的文件,并将这些文件清除





(2.4)如果我们的需求是星期一到星期五上午的7点整准时执行DeleteLock.sh脚本文件,则可以使用如下的三种方式来进行表示。

(2.5)如果我们现在的需求是在每天上午7点0分、5分、10分、30分执行一次DeleteLock.sh脚本文件,则可以使用如下的表示方式。

(2.6)现在我们的需求是1到3月份周一至周五每天上午7点整执行DeleteLock.sh脚本文件,即表示1到3月份所有的工作日都执行该命令(图2-9)。或者我们的需求是1到3月份每个月的1到10号上午7点整我们都执行DeleteLock.sh脚本文件(图2-10)。而当我们将以上两种情况进行合并时,代表的并不是交集,而是并集,即表示1到3月份中每个月1至10号或者是所有的工作日都会执行DeleteLock.sh脚本文件(图2-11)。



(2.7)如果我们想要查看所创建计划任务则可以使用“crontab -l”命令进行查询。
# crontab -l---查询所有创建的计划任务

(2.8)我们使用crontab创建的计划任务都是保存在/var/spool/cron/目录下的,我们进入到root文件中可以查看详细的信息。
# cd /var/spool/cron/


(2.9)如果我们有一个很复杂的业务需求,在设计计划任务的时候也没有必要考虑的很复杂,我们可以把这个复杂的需求,拆分成多个简单的条目来执行就可以了。比如我们现在的需求是每月的最后一天凌晨2点来执行DeleteLock.sh脚本文件。我们可以在crontab中创建四个条目,第一条设置1、3、5、7、8、10、12月每月31号执行DeleteLock.sh脚本;第二条设置4、6、9、11月每月30号执行DeleteLock.sh脚本;第三条创建一个脚本在每年的2月29日凌晨2点执行DeleteLock.sh脚本;第四条创建一个判断脚本cc.sh,在每年的2月1日判断当年是否是闰年,如果是闰年则使用swd或者awk命令将日期部分设置成29号,如果不是闰年则在cc.sh脚本中使用swd或者awk命令将29号替换成28号。

(2.10)在我们系统中也是存在着很多的系统任务的,我们进入到/etc/目录下可以看到cron*开头的所有文件,其中“/etc/cron.daily”代表的是每日执行的计划任务,“/etc/cron.hourly”代表的是每小时执行的计划任务,“/etc/cron.monthly”代表的是每月执行的计划任务,“/etc/cron.weekly”代表的是每周执行的计划任务。如果我们想要在特定的时间执行特定的计划任务,则可以将编写好的脚本放到对应的目录当中。

(2.11)如果我们需要将创建的计划任务删除,则可以使用“crontab -r”将root用户创建的所有计划任务全部删除。
# crontab -r

(2.12)在系统中默认是允许普通用户创建计划任务的,如果我们想要限制普通用户创建计划任务,则可以通过创建/etc/cron.deny文件,并填写需要禁止的用户名即可(图2-18)。如果此时我们又允许tom用户可以创建计划任务,那么我们可以通过两种方式来实现,第一种是在/etc/cron.deny文件中将tom用户删除即可;第二种是我们再次创建一个/etc/cron.allow文件,并将tom用户填写到文件中,此时我们发现虽然/etc/cron.allow配置文件和/etc/cron.deny配置文件中都填写了tom用户,但是用户同时存在时默认是以/etc/cron.allow配置文件中的信息生效(图2-19)。
# vim /etc/cron.deny



(三)清理临时文件
(3.1)在系统中很多时候会生成一些系统的临时文件,例如在/tmp目录下存在很多系统自动生成的文件。
# ls /tmp/

(3.2)例如我们现在的需求是将3天之前生成的系统文件全部清理掉,此时我们先将tmpwatch命令对应的软件安装起来,我们使用man tmpwatch命令可以查看tmpwatch命令相关参数的使用方法(图3-3),我们将当前目录中3天以前访问的文件全部删除掉(图3-4),我们希望将当前目录中3小时以上时间没有访问的文件全部删除,则需要加上“-f”强制删除的选项(图3-5)。
# yum install tmpwatch -y
# tmpwatch -u 3d .---将当前目录中3天以前访问的文件全部删除掉
# tmpwatch -u 3h . -f---将当前目录中3小时以上时间没有访问的文件全部删除




(3.3)当然我们的系统中还是有其他清除临时文件的工具的,在RHEL7中新增加了一个服务用来管理临时文件的。
# systemctl list-unit-files | grep systemd-tmpfi

(3.4)systemd-tmpfiles-setup.service这个服务可以定期清理一些文件,还可以定期创建一些必须的文件或目录,systemd-tmpfiles要读取自己的配置文件才能知道要清理哪些临时文件,它需要读取的配置文件主要是放在如下的目录中的。
# ls /usr/lib/tmpfiles.d/---保存都是系统自动生成的文件供systemd-tmpfiles进行读取,一般是不建议大家对其中的内容进行修改
# ls /run/tmpfiles.d/---保存都是系统守护进程产生的文件供systemd-tmpfiles进行读取,我们一般也是不用去修改的
# ls /etc/tmpfiles.d/---主要存放的是用户自己管理的一些配置文件供systemd-tmpfiles进行读取,一般我们自定义的配置文件都是建议放在这个目录中的

(3.5)我们在/etc/tmpfiles.d/目录下创建一个aa.conf的配置文件,指定创建的目录、目录的默认权限、目录的属主属组信息、超时清理文件的时间等。
# cd /etc/tmpfiles.d/


(3.6)接着我们执行systemd-tmpfiles命令时,系统便会自动创建/tmp/aa目录(图3-10)。接着我们进入/tmp/aa目录中创建一个test.txt文件,然后等10秒后执行“clean”命令,此时我们发现/tmp/aa/目录中的所有文件都已经清理了(图3-11)。
# systemd-tmpfiles --clean


(3.7)如果我们在/tmp/aa目录下再创建一个目录rh124并在目录中创建一个文件,然后等待10秒后重新修改目录最后的访问时间,接着再次去执行systemd-tmpfiles的清理临时文件的操作。此时由于rh124目录没有超过10秒,目录中的文件testRH124.txt文件超过了10秒,执行清理文件的命令后,我们发现rh124仍然是存在的,但是目录下的文件testRH124.txt已经清理了。

(3.8)由于在执行“systemd-tmpfiles”相关的命令时会读取三个目录包括:/usr/lib/tmpfiles.d/目录、/run/tmpfiles.d/目录、/etc/tmpfiles.d/目录下的所有的配置文件的信息。而如果我们只想读取某一个特定的配置文件进行执行,则可以在最后指定特定的配置文件名,例如指明aa.conf,那么就不会清理其他配置文件中的条目。
# systemd-tmpfiles --clean aa.conf---我们可以加上aa.conf,指明只是执行清理aa.conf配置文件中条目

(3.9)当然我们在/etc/tmpfiles.d/目录下创建好aa.conf配置文件后,系统也是会定期对我们所创建的配置文件中的条目进行清理的。在/usr/lib/systemd/system这个目录中存放了定期执行配置文件的文件(图3-14),例如“OnBootSec=15min”表示开机后15分钟会执行systemd-tmpfiles-clean的操作(图3-15)。当然/usr/lib/systemd/system目录中包含定期执行的文件的执行范围默认是对应/usr/lib/tmpfiles.d/目录、/run/tmpfiles.d/目录、/etc/tmpfiles.d/目录下的所有的配置文件中的条目的。
# cd /usr/lib/systemd/system
# vim systemd-tmpfiles-clean.timer

—————— 本文至此结束,感谢阅读 ——————

原文地址:https://blog.51cto.com/13613726/2460808

时间: 2024-07-29 18:14:55

【讲清楚,说明白!】计划任务crontab及企业实战应用的相关文章

Linux 计划任务 Crontab 笔记与总结(2)Crontab 的基本组成与配置

[Crontab 的基本组成] ① 系统服务 CROND:每分钟都会从配置文件刷新定时任务 ② 配置文件 :文件方式设置定时任务 ③ 配置工具 crontab:用途调整定时任务 [配置文件的配置文件格式] * * * * * COMMAND 第一个 * :分钟 0 - 59,* 表示每分钟都要执行 第二个 * :小时 0 - 23 第三个 * :日期  1 - 31 第四个 * :月份 1 - 12 第五个 * :星期 0 - 7(0 或 7 表示星期天) [例1]每晚的 21:30 重启 Ap

Linux计划任务Crontab实例详解教程

说明:Crontab是Linux系统中在固定时间执行某一个程序的工具,类似于Windows系统中的任务计划程序 下面通过详细实例来说明在Linux系统中如何使用Crontab 操作系统:CentOS 一.安装crontab yum install vixie-cron  #安装 chkconfig crond on  #设为开机启动,先要安装chkconfig(yum install chkconfig) service crond start  #启动 service crond stop  

Citrix Provisioning Services 7.13企业实战

基于本人多年的项目经验,加上近期长达半年呕心沥血的总结.历经2周终于完 成了一期视频教程,总共20课,旨在帮助广大IT技术爱好者掌握使用的技术. 总体来说我个人感觉这套视频还是挺不错的,可能我自己的风格不是很合大家胃口,但是我讲的东西都是实实在在的,你只要认真看,一定能学到很多实用的东西.我不会反复跟你讲太多理论,20集视频里面你能学到的东西可能比看人家100集视频还要多. 全 网 首 发Citrix Provisioning Services 7.13企业实战.  PVS 7.13有很多新功能

大数据内功修炼到企业实战

情人节没啥送的,充气娃娃太俗,女朋友送不起,就送全套吧!!! 2.14日 晚8:00,Q群不见不散!!! <大数据内功修炼到企业实战2.0>全新完整版!!! 无加密,免费送!!! 牢记接头暗号: 大数据培训哪家强?老司机推荐十八掌! 神回复:老子推荐十八掌!!!

大数据内功修炼到企业实战2.0》全新完整版!!!&#160; 无加密,免费送!!!

                                           <大数据内功修炼到企业实战2.0>全新完整版!!!  无加密,免费送!!!  还有送:项目实战视频.机器学习等持续更新课程 牢记接头暗号:    大数据培训哪家强?老司机推荐十八掌!    神回复:老子推荐十八掌!!!

《大数据内功修炼到企业实战2.0》全新完整版!!! 无加密,免费送!!!

情人节没啥送的,充气娃娃太俗,女朋友送不起,就送全套吧!!!               2.14日 晚8:00,Q群不见不散!!! <大数据内功修炼到企业实战2.0>全新完整版!!!  无加密,免费送!!! 牢记接头暗号:    大数据培训哪家强?老司机推荐十八掌!    神回复:老子推荐十八掌!!! --------------------华丽的分割线------------------------------1.复制以上内容(包括图片),在3个IT类博客发表2.分享以上内容(包括图片)到

开源数据库中间件MYCAT产品介绍与企业实战

开源产品就像一块布,不能拿来就用,我们要量体裁衣,把它变成一件衣服.互联网开发无小事,因为互联网应用要面对海量信息,一个小小的问题也能被无限放大,就像汪洋中的蝴蝶效应.一个互联网应用遇到的问题可能与系统.网络.应用.架构.数据等各个层面的问题有关,只有耐心发现并处理好每一个相关层面的问题,才能最终形成一款好的互联网应用.时刻提醒自己当下一波巨浪到来前我们会准备的更好! <开源数据库中间件MYCAT产品介绍与企业实战>  下载地址:http://download.csdn.net/detail/

18道Shell高级编程企业实战题及参考答案(一)

Shell高级编程企业实战题参考解答 ########################################################################### 让我们一起感谢,本文内容答案完全来自老男孩教育的学生-张耀课前上机考试解答! ########################################################################### 目录: 1.监控MySQL主从同步... 1 2.批量创建文件及改名... 3

企业实战总结1

提前跟大家说明,学习企业实战是个漫长的过程,需要大家有足够的耐心去学习,希望大家有个好的学习结果! 首先告诉大家,网络服务器分为DNS IIS SMTP POP3等,PKI叫做公共密钥架构,我们企业实战所有的实验都将在虚拟机里进行,首先要安装WORKSTATION,我用的版本是10.0.4,安装WORKSTATION后创建虚拟机,今天主要说的是操作流程以及相关知识,具体操作步骤会在后期博文中截图. WINDOWS SERVER2012分为标准版和数据中心版,两个版本功能一样,只是许可上有差别,标