linux 计划任务 命令 path,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                #查看服务运行状态

43cd7fcfba7e

4)语法

at(选项)(参数)

选项如下:-f:指定包含具体指令的任务文件

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

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

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

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

5) 实例

[root@shell ~]#

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

43cd7fcfba7e

[root@shell ~]#

[root@shell ~]# at  now

at> userdel  boy                              #删除该用户

at> userdel  xinhua                        #删除该用户

at>

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

[root@shell ~]#

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

43cd7fcfba7e

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>

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

[root@shell ~]#

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

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

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

[root@shell ~]#

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

[root@shell ~]#

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

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

[root@shell ~]#

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

2Fri 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

43cd7fcfba7e

前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 one1 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 ~]#

43cd7fcfba7e

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

[root@shell ~]#

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

no crontab for ctsi - using an empty one1 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 ~]#

43cd7fcfba7e

实例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 -l21 5 1,10,22 * * touch  /tmp/a.txt

[root@shell ~]#

43cd7fcfba7e

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

[root@shell ~]# crontab  -e

crontab: installing new crontab

[root@shell ~]#

[root@shell ~]# crontab  -l21 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  -l3,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 -l15 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 ~]#

43cd7fcfba7e

实例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 ~]#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值