计划任务

1、什么叫计划任务

    所谓的计划任务自认为就是服务器天天都有访问压力大的时候和压力小的时候,而根据咱们的平常维护所得出通常服务器夜里压力比较小,而咱们好比在执行大的操做的时候必需要避开服务器业务高峰和服务器压力过大的时候,因此咱们会选择在夜里作操做,而这些操做只是执行一条命令而已,咱们为了咱们亲身等到后半夜来执行命令,那么咱们就用到了计划任务的功能,计划任务也就是一次性或者周期性执行的任务;那么这样linux就为咱们准备了两种计划任务,一种是只会执行一次at计划任务和一种能够周期性执行的cron计划任务。linux

2、计划任务的好处

像一些作运维工做的,平时会有不少重复工做,如定点备份,按期重启服务,上线服务,按期检测等等,而这些任务有的须要在半夜进行,咱们若是再等到半夜去操做会很累,很繁琐,因此咱们这个时候就要用到计划任务了,只要咱们把计划任务写好,咱们就能够喝喝茶,干点其余事情了,也就不须要熬夜加班了。shell

3、计划任务的类型

1.系统执行的工做:系统周期性所要执行的工做,如备份系统数据、清理缓存
2.我的执行的工做:某个用户按期要作的工做,例如每隔10分钟检查邮件服务器是否有新信,这些工做可由每一个用户自行设置。centos

4、计划任务的实现

经常使用语执行计划任务的命令——at,batch,与周期性任务相关的命令crontabs.
1.at命令和batch命令的区别
at命令旨在特定的之间执行任务;batch命令设置的任务由系统选择空闲时间去执行,空闲时间默认为cpu利用率小于0.8的时候
2.at命令
at的任务是否能运行依赖于atd服务
咱们能够先查看下atd服务是否运行
centos6:service atd status
centos7:systemctl status atd缓存

语法
at(选项)(参数)
选项
-f:指定包含具体指令的任务文件;
-q:指定新任务的队列名称;
-l:显示待执行任务的列表;
-d:删除指定的待执行任务;
-m:任务执行完成后向用户发送E-mail。
实例
Linux计划任务
Linux计划任务
at命令后想要执行程序的确切时间,而后回车
接着在>后输入你想要执行的命令,最后用Ctrl+d组合键退出at,像图中它就会在16:54执行ls,而后把结果发给root,咱们能够在/var/spool/mail/root中查看
咱们在时间后跟上tomorrow让它在明天某个时间执行,或者跟上确切日期 17:04 04/04/2018 这就是让它在2018年4月3日17:04执行
或者at now +10 minutes 十分钟后执行
固然不止minutes这个关键词可使用,下面的关键词均可以使用
minutes:表示《分钟》。bash

hours:表示《小时》。

days:表示《天》。

weeks:表示《星期》。

months:表示《月》。

years:表示《年》。

atq和atrm命令:列出和删除正在等待执行的at任务
咱们每次使用at命令指定延时执行的命令,at都会给其分配一个job编号,好比上面的例子中咱们at任务编号就是4,下面我就给你们演示下具体如何操做
Linux计划任务
把任务删除后就不会再去执行了。
咱们使用at -l 一样能够查看要延时执行的任务
at还有黑名单和白名单功能服务器

(黑名单):当仅/etc/at.deny 存在时(默认)写入deny的用户不能配置at
(白名单):当/etc/at.allow存在时/etc/at.deny失效,只有写在allow中的用户才能配置at
当/etc/at.allow及/etc/at.deny都不存在时,仅有root才能配置at
bath命令的用法和at类似,这里就再也不介绍了。运维

2.crontab命令ide

以前咱们介绍了at命令,在这里我就要跟你们介绍一个更强大的命令了,就是crontab,咱们使用at命令只能执行某个命令一次,而crontab却能够重复执行命令,例如:每分钟,每小时,天天,每周等。centos7

crontab实际上是一个命令,用来读取和修更名为crontab的文件。这个crontab文件包含了你要定时执行的程序列表,也包含了执行的时刻。spa

实际上,有两个命令,一个叫crontab,一个叫cron。crontab用于修改crontab文件,cron用于实际执行定时的程序。
有三个经常使用参数:

-e:修改crontab文件。-l:显示crontab文件。-r:删除crontab文件

/etc/crontab 系统级计划任务的主配置文件
仅能经过 root定义,不过能够以普通用户的身份去执行计划任务中的命令。
内容以下:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# |  .------------- hour (0 - 23)# |  |  .---------- day of month (1 - 31)# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# |  |  |  |  |# *  *  *  *  * user-name command to be executed

前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪一个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将经过电子邮件发送给root用户,若是MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
下面的注释则是配置文件格式,以及每个※所对应的含义。
在这里我就跟你们详细介绍下每一段的定义:
第一段应该定义的是:分钟,表示每一个小时的第几分钟来执行。范围是从0-59
第二段应该定义的是:小时,表示从第几个小时来执行,范围是从0-23
第三段应该定义的是:日期,表示从每月的第几天执行,范围从1-31
第四段应该定义的是:月,表示每一年的第几个月来执行,范围从1-12
第五段应该定义的是:周,表示每周的第几天执行,范围从0-6,其中 0表示星期日。
每六段应该定义的是:用户名,也就是执行程序要经过哪一个用户来执行,这个通常能够省略;
第七段应该定义的是:执行的命令和参数。

咱们在文件的最后一行添加内容如:
5 * * * * ls
就是指定每小时的第5分钟执行一次ls命令
咱们也能够在指令前添加用户:
0 */2 * * * user1 ls

指定每两个小时以user1身份执行一次ls
咱们也能够写一些天天要执行的脚本文件放在一个目录下:
30 5 * * * root run-parts /etc/cron.daily
指定天天的 5:30 执行/etc/cron.daily目录下的全部可执行文件(若是要单独执行某个脚本须要把run-parts,后面跟上脚本名就能够了)
咱们须要记住几个特殊符号的含义:

"*"表明取值范围内的数字,
"/"表明"每",

"-"表明从某个数字到某个数字,

","分开几个离散的数字
那么在每周一至周五的10:30开始,每隔2小时重复一次就是
30 10-23/2 * * 1-5
PS:咱们每次修改完crontab都须要重启服务才能生效。咱们制定的脚本也都要给加上执行权限,否则是没法执行的。
重启命令以下:
/etc/rc.d/init.d/crond restart #重启

/etc/rc.d/init.d/crond reload #不中断服务,从新载入配置咱们还有一种增长调度任务的方法就是:crontab -e 而后写入相应的计划任务,写完后保存退出就能够了,这种方法写的调度任务是在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不能够直接编辑的,只能够用crontab -e 来编辑。PS:cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。所以此文件修改后不须要从新启动cron服务。crontab -r 删除所有计划,不跟参数是删除当前用户的计划,跟用户名则是删除某个用户的计划。

相关文章
相关标签/搜索