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

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


经验丰富的系统运维工程师可使得Linux系统在无需人工介入的状况下,在指定的时间段自动启动或中止某些服务或命令,从而实现运维的自动化。尽管咱们如今已经有了功能强大的脚本程序来执行一些批处理工做,可是若是仍然须要在天天凌晨两点敲击键盘回车键来执行这个脚本程序,这简直太痛苦了。因此这就使得咱们能掌握如何设置服务器的计划任务服务的方法,并拥有把周期性,规律性的工做交给系统自动完成的技能显得尤其重要。
计划任务分为一次性计划任务与周期性计划任务。例如公司人事写了一封放假邮件,计划是在放假前最后一个工做日的上午10点发送全体员工,此时咱们所须要的就是一次性计划任务。再如数据库管理员须要在天天凌晨2点对业务数据库进行备份,此时咱们所须要的就是经过周期性计划任务解决这个需求。
(一)at计划任务
(1.1)at是属于一次性计划任务,顾名思义,一次计划任务只执行一次,通常用于知足临时的工做需求。咱们可使用at命令实现这种功能,只须要写成“at 时间”的格式就能够了。若是想要查看已设置好但还未执行的一次性计划任务,可使用“at -l”命令;想要将其删除,可使用“atrm 任务序号”。在使用at命令来设置一次性计划任务时,默认采用的是交互式方法。
(1.2)第一个使用“atq”或者“at -l”能够来查看当前系统中全部的计划任务的列表状况。
# atq
# at -l
【讲清楚,说明白!】计划任务crontab及企业实战应用
(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
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
(1.4)在建立指定时间的计划任务时,咱们也是能够指定具体的时间的,精确到时、分。
# at 22:00 2019-12-12---建立一个计划任务,设定在2019年12月12日22:00分执行
# at 4pm 2019-12-12---建立一个计划任务,设定在2019年12月12日下午4点执行
【讲清楚,说明白!】计划任务crontab及企业实战应用
(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
【讲清楚,说明白!】计划任务crontab及企业实战应用
(1.6)若是咱们想查询具体的计划任务的信息,可使用两种方式进行查看,第一种是使用“at -c”命令查询(图1-6和图1-7);第二种是进入到/var/spool/at目录下进行查看计划任务的具体内容(图1-8和图1-9)。
# at -c 1
# cd /var/spool/at
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
(1.7)若是咱们如今须要将多余的计划任务删除,则可使用“atrm”命令或者是“at -d”命令。若是咱们但愿批量删除指定的计划任务,则可使用
# atrm 1---删除第一个计划任务
# at -d 2---删除第二个计划任务
# atrm {3..6}---删除第3到第6个计划任务
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
(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及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用vim


(二)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用户在系统中存在的计划任务
【讲清楚,说明白!】计划任务crontab及企业实战应用
(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”的文件,并将这些文件清除
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
(2.4)若是咱们的需求是星期一到星期五上午的7点整准时执行DeleteLock.sh脚本文件,则可使用以下的三种方式来进行表示。
【讲清楚,说明白!】计划任务crontab及企业实战应用
(2.5)若是咱们如今的需求是在天天上午7点0分、5分、10分、30分执行一次DeleteLock.sh脚本文件,则可使用以下的表示方式。
【讲清楚,说明白!】计划任务crontab及企业实战应用
(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)。
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
(2.7)若是咱们想要查看所建立计划任务则可使用“crontab -l”命令进行查询。
# crontab -l---查询全部建立的计划任务
【讲清楚,说明白!】计划任务crontab及企业实战应用
(2.8)咱们使用crontab建立的计划任务都是保存在/var/spool/cron/目录下的,咱们进入到root文件中能够查看详细的信息。
# cd /var/spool/cron/
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
(2.9)若是咱们有一个很复杂的业务需求,在设计计划任务的时候也没有必要考虑的很复杂,咱们能够把这个复杂的需求,拆分红多个简单的条目来执行就能够了。好比咱们如今的需求是每个月的最后一天凌晨2点来执行DeleteLock.sh脚本文件。咱们能够在crontab中建立四个条目,第一条设置一、三、五、七、八、十、12月每个月31号执行DeleteLock.sh脚本;第二条设置四、六、九、11月每个月30号执行DeleteLock.sh脚本;第三条建立一个脚本在每一年的2月29日凌晨2点执行DeleteLock.sh脚本;第四条建立一个判断脚本cc.sh,在每一年的2月1日判断当年是不是闰年,若是是闰年则使用swd或者awk命令将日期部分设置成29号,若是不是闰年则在cc.sh脚本中使用swd或者awk命令将29号替换成28号。
【讲清楚,说明白!】计划任务crontab及企业实战应用
(2.10)在咱们系统中也是存在着不少的系统任务的,咱们进入到/etc/目录下能够看到cron*开头的全部文件,其中“/etc/cron.daily”表明的是每日执行的计划任务,“/etc/cron.hourly”表明的是每小时执行的计划任务,“/etc/cron.monthly”表明的是每个月执行的计划任务,“/etc/cron.weekly”表明的是每周执行的计划任务。若是咱们想要在特定的时间执行特定的计划任务,则能够将编写好的脚本放到对应的目录当中。
【讲清楚,说明白!】计划任务crontab及企业实战应用
(2.11)若是咱们须要将建立的计划任务删除,则可使用“crontab -r”将root用户建立的全部计划任务所有删除。
# crontab -r
【讲清楚,说明白!】计划任务crontab及企业实战应用
(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
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用服务器


(三)清理临时文件
(3.1)在系统中不少时候会生成一些系统的临时文件,例如在/tmp目录下存在不少系统自动生成的文件。
# ls /tmp/
【讲清楚,说明白!】计划任务crontab及企业实战应用
(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小时以上时间没有访问的文件所有删除
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
(3.3)固然咱们的系统中仍是有其余清除临时文件的工具的,在RHEL7中新增长了一个服务用来管理临时文件的。
# systemctl list-unit-files | grep systemd-tmpfi
【讲清楚,说明白!】计划任务crontab及企业实战应用
(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进行读取,通常咱们自定义的配置文件都是建议放在这个目录中的
【讲清楚,说明白!】计划任务crontab及企业实战应用
(3.5)咱们在/etc/tmpfiles.d/目录下建立一个aa.conf的配置文件,指定建立的目录、目录的默认权限、目录的属主属组信息、超时清理文件的时间等。
# cd /etc/tmpfiles.d/
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
(3.6)接着咱们执行systemd-tmpfiles命令时,系统便会自动建立/tmp/aa目录(图3-10)。接着咱们进入/tmp/aa目录中建立一个test.txt文件,而后等10秒后执行“clean”命令,此时咱们发现/tmp/aa/目录中的全部文件都已经清理了(图3-11)。
# systemd-tmpfiles --clean
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用
(3.7)若是咱们在/tmp/aa目录下再建立一个目录rh124并在目录中建立一个文件,而后等待10秒后从新修改目录最后的访问时间,接着再次去执行systemd-tmpfiles的清理临时文件的操做。此时因为rh124目录没有超过10秒,目录中的文件testRH124.txt文件超过了10秒,执行清理文件的命令后,咱们发现rh124仍然是存在的,可是目录下的文件testRH124.txt已经清理了。
【讲清楚,说明白!】计划任务crontab及企业实战应用
(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配置文件中条目
【讲清楚,说明白!】计划任务crontab及企业实战应用
(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
【讲清楚,说明白!】计划任务crontab及企业实战应用
【讲清楚,说明白!】计划任务crontab及企业实战应用运维

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

相关文章
相关标签/搜索