任务计划at命令和周期性运行执行任务crontab命令使用详细介绍

任务计划at命令使用详细介绍

at命令作用:未来的某时间点执行一次某任务;

at命令使用语法:

              at [OPTION]… TIME

 

                     常用选项[OPTION]:

                            -l:查看作业队列,相当于atq

                            -f /PATH/FROM/SOMEFILE:从指定文件中读取作业任务,而不用再交互式输入;

                            -d:删除指定的作业,相当于atrm;

                            -c:查看指定作业的具体内容;

                            -q QUEUE:指明队列;可以将不同用户的作业放在不同的队列中,

                              队列范围a-z,默认都在a队列,~]# at -q b now+5min

注意:at的作业有队列,用单个字母表示,默认都使用a队列;若多用户有作业建议使用队列区分及避免拥堵。

                     TIME参数:

                            HH:MM [YYYY-mm-dd]

                            noon中午12点、midnight晚上12点、teatime下午4点、 tomorrow明天

                            now+#(UNIT)  now+1min

                                   UNIT:minutes, hours, days, OR weeks

                                  

注意:作业执行结果是以邮件发送给提交作业的用户;可以使用脚本作为作业内容(示例2)

示例1:创建计划任务

提示不能运行计划任务:

任务计划at命令和周期性运行执行任务crontab命令使用详细介绍

解决办法:

[root@cuixuanguo ~]# chkconfig –level 35 atd on

[root@cuixuanguo ~]# service atd start

示例1:配置计划任务

任务计划at命令和周期性运行执行任务crontab命令使用详细介绍

检查计划任务的执行状态,若执行了就会发送邮件,再使用mail命令查看邮件。

任务计划at命令和周期性运行执行任务crontab命令使用详细介绍

创建多作业

任务计划at命令和周期性运行执行任务crontab命令使用详细介绍

删除指定作业

任务计划at命令和周期性运行执行任务crontab命令使用详细介绍

查看待执行的作业内容

~]# at -c 5

任务计划at命令和周期性运行执行任务crontab命令使用详细介绍  前面显示的都是环境变量,省略

示例2:使用脚本a作为作业的内容

任务计划at命令和周期性运行执行任务crontab命令使用详细介绍

 

周期性运行执行任务crontab命令使用详细介绍

 

使用crontab命令前要确保crond守护进程(daemon)处于运行状态,cronie主程序包提供了crond守护进程及相关辅助工具;

CentOS 7:

                            systemctl  status  crond.service或service  crond  status

                                   Active: active (running) … …代表crond服务正常状态

任务计划at命令和周期性运行执行任务crontab命令使用详细介绍

CentOS 6:

                            service  crond  status

                                   … is running.代表crond服务正常状态

任务计划at命令和周期性运行执行任务crontab命令使用详细介绍

向crond提交作业的方式不同于at,它需要使用专用的配置文件,此文件有固定格式,crontab调用vi进行编辑,但是crontab具有语法错误提示功能尽可能保证作业能够达到目标,而直接使用文本编辑器则没有语法错误提示功能,所以不建议使用文本编辑器直接编辑此文件,要使用crontab命令;

       cron任务分为两类:

              系统cron任务:主要用于实现系统自身的维护;一般不编辑系统cron任务。

                                   手动编辑:/etc/crontab文件

              用户cron任务:

                                   命令编辑:crontab命令

 

系统cron的配置格式说明

系统cron配置文件位置:/etc/crontab

                            SHELL=/bin/bash

                            PATH=/sbin:/bin:/usr/sbin:/usr/bin

                            MAILTO=root

 

                            # 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                 

  注意:

             (1) 每一行定义一个周期性任务,共7个字段;

                            *  *  *  *  * : 定义周期性时间

                            user-name : 运行任务的用户身份

                             command to be executed:任务

              (2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;

              (3) 执行结果邮件发送给MAILTO指定的用户

 

用户cron的配置格式说明

用户cron配置文件位置:/var/spool/cron/USERNAME

                            SHELL=/bin/bash

                            PATH=/sbin:/bin:/usr/sbin:/usr/bin

                            MAILTO=USERNAME

 

                            # 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

                            # |  |  |  |  |

                            # *  *  *  *  *   command to be executed

                           

 注意:用户cron在指定的/var/spool/cron/USERNAME文件中,也就是说已经定义好了使用哪个用户身份运行,所以在任务中就不需要用户名了。

            (1) 每行定义一个cron任务,共6个字段;

                           *  *  *  *  * : 定义周期性时间

                            command to be executed:任务

            (2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;

            (3) 邮件发送给当前用户;

 

cron的时间表示法

            (1) 特定值;

                 给定时间点有效取值范围内的值;

注意:day of week和day of month一般不同时使用;如每月的3号还是周3出现的几率太小了,失去了周期性的意义。

            (2) *

                  给定时间点上有效取值范围内的所有值;表“每..”

            (3) 离散取值:,

                  在时间点上使用逗号分隔的多个值;

                                          #,#,#

              (4) 连续取值:-

                    在时间点上使用-连接开头和结束

                                          #-#

              (5) 在指定时间点上,定义步长:

                    /#:#即步长;

                                  

              注意:

                      (1) 指定的时间点不能被步长整除时,其意义将不复存在;

                      (2) 最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其它机制;

                            定义成每分钟任务:而在利用脚本实现在每分钟之内,循环执行多次;

 

时间表示法示例:

                            (1) 3 * * * *:每小时执行一次;每小时的第3分钟;执行一次

                            (2) 3 4 * * 5:每周执行一次;每周5的4点3分;执行一次

                            (3) 5 6 7 * *:每月执行一次;每月的7号的6点5分;执行一次

                            (4) 7 8 9 10 *:每年执行一次;每年的10月9号8点7分;执行一次

                            (5) 9 8 * * 3,7:每周三到周日的8点9分执行一次

                            (6) 0 8,20 * * 3,7:每周三到周日的8点至20点期间每小时都执行一次

                                  * 8,20 * * 3,7:每周三到周日的8点至20点期间每分钟都执行一次

                            (7) 0 9-18 * * 1-5:周1-周5的9点到18点每小时执行一次

                            (8) */5 * * * *:每5分钟执行一次某任务;

                            (9) */7:不能整除,其意义将不复存在

 

crontab命令使用方法:

管理员可以指定某用户,或用户登录自己的终端编辑任务

                            crontab [-u user] [-l | -r | -e] [-i]

                                   -e:编辑任务;自动调用vi编辑器

                                   -l:列出自己的所有任务;

                                   -r:移除所有任务;即删除/var/spool/cron/USERNAME文件;

                                   -i:在使用-r选项移除所有任务时提示用户确认;

                                   -u  user:root用户可为指定用户管理cron任务;

                                         如: crontab -u centos -e|-l|-r                                  

注意:运行结果以邮件通知给当前用户;如果拒绝接收邮件:在任务能够正常执行一次后再使用/dev/null。

                            (1) COMMAND > /dev/null

                            (2) COMMAND &> /dev/null 例如:在编辑界面*/2 * * * * /bin/echo "test" &> /dev/null

                            命令echo要使用绝对路径/bin/echo,可使用which命令查看命令的绝对路径。

                           

注意:

     1、定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%不用转义亦可;

     2、某任务在指定的时间因关机未能执行,下次开机不会自动执行

     3、 如果期望某时间因故未能按时执行,下次开机后无论是否到了相应时间点都要执行一次,可使用anacron实现;

 

示例:

任务计划at命令和周期性运行执行任务crontab命令使用详细介绍自动调用vi进入任务编辑界面

如果编辑过程有语法错误,在退出编辑时会提示如下界面

任务计划at命令和周期性运行执行任务crontab命令使用详细介绍提示:任务有语法错误,不能定义,是否要重新编辑,输入y重新编辑

修正语法后退出编辑提示:crontab: installing new crontab

当任务被执行后提示:您在 /var/spool/mail/centos 中有新邮件。

 

下面提供3个练习题,使大家更好的理解crontab的使用:

1、每12小时备份一次/etc目录至/backups目录中,保存文件 名称格式为“etc-yyyy-mm-dd-hh.tar.xz”            

2、每周2、4、7的0点备份/var/log/secure文件至/logs目录中,文件名格式为“secure-yyyymmdd”;

3、每两小时取出当前系统/proc/meminfo文件中以S或M开头的行信息追加至/tmp/meminfo.txt文件中;

4、制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00

 

 

第一题答案:0 */12 * * * /bin/tar jcf /backups/etc-$(date +%Y-%m-%d-%H).tar.xz etc

第二题答案:0 0 * * 2,4,7 /bin/cp /var/log/secure /logs/secure-$date +%Y%m%d)

第三题答案:0 */2 * * * /bin/grep "^[SM].*" /proc/meminfo &> /tmp/meminfo.txt

第四题答案:效果在mail中看到。

创建脚本:

#]~vim date_test

#!/bin/bash
#
date +"%Y-%m-%d %H:%M:%S"

创建周期性任务:

crontab -e

*/1 * * * * /bin/bash /date_test

 

原创文章,作者:咖啡枣,如若转载,请注明出处:http://www.178linux.com/124182

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code