Linux 计划任务

1、计划任务是什么

计划任务,字面意思理解就是在约定好的时间执行已经计划好的工作。在Linux中我们经常使用cron服务来完成这项工作。比如我们可以使用cron来做一个每天晚上12点备份一个日志文件,这就是个计划任务。


2、计划任务的好处

例如做运维工作的,平时会有很多重复工作,如定点备份,定期重启服务,上线服务,定期检测等等,而这些任务有的需要在半夜进行,我们如果再等到半夜去操作会很累,很繁琐,所以我们这个时候就要用到计划任务了,只要我们把计划任务写好,我们就可以喝喝茶,干点其他事情了,也就不需要熬夜加班了。


3、计划任务的类型

1)系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存

2)个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置


4、计划任务的实现

常用于执行计划任务的命令:

at:一次性的,单次有效

batch

crontab:周期性的,长期有效


4.1  at任务与crontab任务的区别

计划任务的安排方式分为两种:

一种是定时性的:也就是例行。就是每隔一定的周期就要重复来做这个事情

一种是突发性的:就是这次做完了这个事情,下次就没有了。临时决定,只有一次执行


at 和 crontab 这两个命令:

at:可以处理仅执行一次就结束的命令

crontab:会把你指定的工作或任务,比如:脚本等,按照设定的周期循环执行


5、at 延时执行任务

1)at命令和batch命令的区别

at命令旨在特定的时间执行任务;batch命令设置的任务由系统选择空闲时间去执行,空闲时间默认为cpu利用率小于0.8的时候

2)at命令

at的任务是否能运行依赖于atd服务

我们可以先查看下atd服务是否运行

centos6:service  atd  status

centos7:systemctl  status  atd

3)安装 at 

[root@shell ~]#

[root@shell ~]# yum  list  at

[root@shell ~]# yum  install  at                  #安装at

[root@shell ~]# systemctl  start  atd                 #开启atd服务    

[root@shell ~]# systemctl  enable  atd            #设置atd服务开机自启动

[root@shell ~]# systemctl  status  atd                #查看服务运行状态

4)语法

at(选项)(参数)

选项如下:

-f:指定包含具体指令的任务文件

-q:指定新任务的队列名称

-l:显示待执行任务的列表

-d:删除指定的待执行任务

-m:任务执行完成后向用户发送E-mail

5) 实例

[root@shell ~]#

[root@shell ~]# cat  /etc/passwd             #查看系统用户

[root@shell ~]#

[root@shell ~]# at  now

at> userdel  boy                              #删除该用户

at> userdel  xinhua                        #删除该用户

at> <EOT>

job 4 at Thu Jun 11 18:55:00 2020

[root@shell ~]#

[root@shell ~]# cat  /etc/passwd                 #查看计划任务是否执行成功

at 命令后面 为想要执行程序的确切时间,然后回车

接着在 >后面输入你想要执行的命令,最后用Ctrl+d组合键退出at,像图中它就会在此刻执行删除用户的命令

我们在时间后跟上tomorrow让它在明天某个时间执行,或者跟上确切日期 17:02 06/12/2020

或者at now +10 minutes 十分钟后执行

当然不止minutes这个关键词可以使用,下面的关键词都可以使用

minutes:表示《分钟》

hours:表示《小时》

days:表示《天》

weeks:表示《星期》

months:表示《月》

years:表示《年》


atq 和 atrm命令:列出和删除正在等待执行的at任务

我们每次使用at命令指定延时执行的命令,at都会给其分配一个job编号,比如上面的例子中我们at任务编号就是4,下面我就给大家演示下具体如何操作

[root@shell ~]#

[root@shell ~]# at  now +5  minutes                       #5分钟以后执行

at> touch  test.txt       

at> <EOT>

job 5 at Fri Jun 12 14:09:00 2020

[root@shell ~]#

[root@shell ~]# atq                              #查看at任务

2 Fri Jun 12 18:30:00 2020 a root                   #系统默认运行

5 Fri Jun 12 14:09:00 2020 a root                   #我刚刚创建的

[root@shell ~]#

[root@shell ~]# atrm  5                                      #删除at任务5

[root@shell ~]#

[root@shell ~]# atq                                          #查看at任务5是否被删除

2 Fri Jun 12 18:30:00 2020 a root

[root@shell ~]#

[root@shell ~]# at  -l                                    #此命令同时也是查看at任务5是否被删除

2 Fri Jun 12 18:30:00 2020 a root

[root@shell ~]#

把任务删除后就不会再去执行了

我们使用 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相似,这里就不再介绍了


6、crontab 计划任务

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

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

实际上,有两个命令,一个叫 crontab,一个叫 cron。crontab用于修改crontab文件,cron用于实际执行定时的程序。

# systemctl is-enabled crond.service                 #查看crond服务是否是开机自启动,crond服务必须是开机自启动   

/etc/cron*目录下文件说明:

cron.deny  #控制用户是否能做计划任务的文件;

cron.monthly  #每月执行的脚本;

cron.weekly  #每周执行的脚本;

cron.daily  #每天执行的脚本;

cron.hourly  #每小时执行的脚本;

crontab  #主配置文件


crontab 有三个常用参数:

-e:修改crontab文件

-l:显示crontab文件

-r:删除crontab文件

/etc/crontab  为系统级计划任务的主配置文件

仅能通过 root定义,不过可以以普通用户的身份去执行计划任务中的命令。

主配置文件内容如下:

[root@shell ~]#

[root@shell ~]# cat  /etc/crontab

前3行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash;

第二行PATH变量指定了系统执行命令的路径;

第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户;

下面的注释则是配置文件格式,以及每一个※所对应的含义

在这里我就跟大家详细介绍下每一段的定义:

第一段应该定义的是:分钟,表示每个小时的第几分钟来执行。范围是从0-59

第二段应该定义的是:小时,表示从第几个小时来执行,范围是从0-23

第三段应该定义的是:日期,表示从每个月的第几天执行,范围从1-31

第四段应该定义的是:月,表示每年的第几个月来执行,范围从1-12

第五段应该定义的是:周,表示每周的第几天执行,范围从0-6,其中 0表示星期日。

每六段应该定义的是:用户名,也就是执行程序要通过哪个用户来执行,这个一般可以省略;

第七段应该定义的是:执行的命令和参数。

时间记忆口诀:分 时 日 月 周

1)几个特殊符号

*  *号,表示任意时间都,也是”每”的意思,举例:如00 23 * * *cmd表示每月每周每日的23:00都执行cmd任务 ;

-   减号,表示分隔符,表示一个时间段范围段,如17-19点,每小时的00分执行任务,00 17-19 * * * cmd 。就是17,18,19点整点分别执行的意思 ;

, 逗号,表示分隔时段的意思,30 17,18,19 * * * /bin.sh /scripts/dingjian.sh表示每天17,18和19点的半点时刻执行/scripts/dingjian.sh脚本。也可以和”-”结合使用,如:30 3-5,17-19 * * * /scripts/dingjian.sh  ;

/n  N代表数字,即”每隔n单位时间”,如:每10分钟执行一次任务可以写成*/10 * * * * cmd,其中“*/10”的范围是0-59,因此也可以写成0-59/10  

那么在每周一至周五的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 #不中断服务,重新载入配置

2)我们还有一种增加调度任务的方法就是

crontab -e 然后写入相应的计划任务,写完后保存退出就可以了,这种方法写的调度任务是在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。

PS:cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。

crontab  -r 删除全部计划任务,不跟参数是删除当前用户的计划,跟用户名则是删除某个用户的计划。

3)实例

[root@shell ~]#

[root@shell ~]# systemctl  status  crond         #先查看cron服务是否在运行

[root@shell ~]# crontab  -l              #查看当前环境是否存在计划任务

no  crontab  for  root                 #当前不存在任何计划任务

[root@shell ~]#

实例1:每天凌晨2点01分开始备份数据

[root@shell ~]# crontab   -e                      #编辑计划任务

no crontab for root - using an empty one

1 2 * * *  tar  cfP /root/123.tar  /opt/123/                                     #每天凌晨2点01分开始备份数据

crontab: installing new crontab

[root@shell ~]#

[root@shell ~]# crontab -l

1 2 * * *  tar  cfP /root/123.tar  /opt/123/

[root@shell ~]#

实例2:为 ctsi 用户,创建一个计划任务

[root@shell ~]#

[root@shell ~]# crontab -u ctsi -e

no crontab for ctsi - using an empty one

1 2 * * * tar cfP /root/123.tar  /opt/123/                                        #每天凌晨2点01分开始备份数据

crontab: installing new crontab

[root@shell ~]#

[root@shell ~]# crontab -u ctsi -l

1 2 * * * tar cfP /root/123.tar /opt/123/

[root@shell ~]#

实例3:查看所有的计划任务

[root@shell ~]# cat /var/spool/cron/ctsi

1 2 * * * tar cfP /root/123.tar  /opt/123/

[root@shell ~]#

[root@shell ~]# cat /var/spool/cron/root

1 2 * * * tar cfP /root/123.tar  /opt/123/

[root@shell ~]#

实例4:每月的1,10,22号5:21分在/tmp/创建一个a.txt

[root@shell ~]#

[root@shell ~]# crontab -e

crontab: installing new crontab

[root@shell ~]#

[root@shell ~]#

[root@shell ~]# crontab -l

21 5 1,10,22 * * touch  /tmp/a.txt

[root@shell ~]#

实例5:每月的1到10号的5:21,输入hello word

[root@shell ~]# crontab  -e

crontab: installing new crontab

[root@shell ~]#

[root@shell ~]# crontab  -l

21 5 1-10 * * echo "hello world"

[root@shell ~]#

实例6:每隔2天的8-11点的3分和15分,创建一个/tmp/b.txt

[root@shell ~]# crontab  -e

crontab: installing new crontab

[root@shell ~]#

[root@shell ~]#

[root@shell ~]# crontab  -l

3,15 8-11 */2 * * touch /tmp/b.txt

[root@shell ~]#

实例7:周一到周五的21:15,创建/tmp/d.txt

[root@shell ~]# crontab -e

crontab: installing new crontab

[root@shell ~]#

[root@shell ~]# crontab -l

15 21 * * 1-5 touch  /tmp/d.txt

[root@shell ~]#

实例8:删除cron计划任务

[root@shell ~]#

[root@shell ~]# crontab  -l                    #查看计划任务

15 21 * * 1-5 touch /tmp/d.txt

[root@shell ~]#

[root@shell ~]# crontab  -r                             #删除计划任务

[root@shell ~]#

[root@shell ~]# crontab -l

no crontab for root

[root@shell ~]#

实例9:每周六、日上午9:00和下午14:00执行ls /root

[root@zabbix ~]# crontab  -e           #编辑写入计划任务内容

[root@zabbix ~]# crontab  -l         #查看当前存在的计划任务

00  9,14  *  *  6,0  /usr/bin/ls  /root

[root@zabbix ~]#

[root@zabbix ~]# tail  -1  /var/spool/cron/root         #查看root用户的计划任务内容

00  9,14  *  * 6,0  /usr/bin/ls  /root

[root@zabbix ~]#

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350