Linux任务计划、周期性任务执行

Linux任务计划、周期性任务执行

at

at命令用于在指定时间执行命令。执行结果会通过邮件发送给用户

at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行

语法

at(选项)(参数)
    atq: 查询任务列表
    atrm: 删除指定任务

选项

-f:指定包含具体指令的任务文件;
-q:指定新任务的队列名称;
-l:显示待执行任务的列表;
-d:删除指定的待执行任务;
-c:查看指定作业的具体内容;
-m:任务执行完成后向用户发送E-mail。

参数

日期时间:指定任务执行的日期时间。

时间格式

at now+5 minutes    任务在5分钟后运行
at now+1 hour       任务在1小时候运行
at now+1 days       任务在1天后运行
at now+1 weeks      任务在1周后运行
at midnight         任务在午夜运行
at 23:30 tomorrow   任务在明天晚上23:30分执行
at 10:20pm          任务在晚上10:20分执行
at 23:30 2018-03-31 任务在指定时间执行
at 5pm +3 days      任务在3天下午5点执行

实例

  • 确保进程atd启用
    [root@localhost tmp]# systemctl start atd
    [root@localhost tmp]# systemctl status atd
    ● atd.service - Job spooling tools
       Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
       Active: active (running) since Sun 2018-04-01 20:58:13 CST; 21h left
     Main PID: 2905 (atd)
       CGroup: /system.slice/atd.service
               └─2905 /usr/sbin/atd -f
    

Apr 01 20:58:13 localhost.localdomain systemd[1]: Started Job spooling tools. Apr 01 20:58:13 localhost.localdomain systemd[1]: Starting Job spooling tools…

  • 1分钟后输出当前时间到指定文件
    [root@localhost ~]# at now+1 minutes
    at> date > /tmp/date
    at> <EOT>
    job 7 at Sat Mar 31 23:21:00 2018
    

crontab

crontab命令被用来提交和管理用户的需要周期性执行的任务,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

  • 系统cron任务:主要用户实现系统自身的维护,手动编辑 :/etc/crontab
  • 用户cron任务:使用crontab命令

系统cron任务配置文件:/etc/crontab

[root@localhost tmp]# cat /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指定的用户

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

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
# |  |  |  |  |
# *  *  *  *  *   command to be executed    

(1) 每行定义一个cron任务,共6个字段;
(2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;
(3) 邮件发送给当前用户;

语法

crontab(选项)(参数)

选项

-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。

参数

crontab文件:指定包含待执行任务的crontab文件。

时间表示法

(1) 特定值;给定时间点有效取值范围内的值;
    注意:day of week和day of month一般不同时使用;
(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:每周三和周日;
(6) 0 8,20 * * 3,7:每周三和每周日的8点和20点
(7) 0 9-18 * * 1-5:每星期一到星期五,9点-18点,每小时执行一次
(8) */5 * * * *:每5分钟执行一次某任务;
(9) * */12 * * * :每12小时执行一次某任务=
(10)* * * * 2,4,7:每周2、4、7执行某次任务

实例

  • 确保crond启用
    [root@localhost tmp]# systemctl start crond
    [root@localhost tmp]# systemctl status crond
    ● crond.service - Command Scheduler
       Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
       Active: active (running) since Sun 2018-04-01 17:15:48 CST; 17h left
     Main PID: 640 (crond)
       CGroup: /system.slice/crond.service
               └─640 /usr/sbin/crond -n
    
    Apr 01 17:15:48 localhost.localdomain systemd[1]: Started Command Scheduler.
    Apr 01 17:15:48 localhost.localdomain systemd[1]: Starting Command Scheduler...
    Apr 01 17:15:48 localhost.localdomain crond[640]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 9% ...ed.)
    Apr 01 17:15:48 localhost.localdomain crond[640]: (CRON) INFO (running with inotify support)
    Hint: Some lines were ellipsized, use -l to show in full.
    

– 每12小时执行一次

  • 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00
    [root@localhost tmp]# crontab
    10 3,5 * * 3 /bin/bash /tmp/date.sh
    
    [root@localhost tmp]# crontab -l
    10 3,5 * * 3 /bin/bash /tmp/date.sh
    
    [root@localhost tmp]# cat /var/spool/cron/root 
    10 3,5 * * 3 /bin/bash /tmp/date.sh

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/94813

(1)
eighteenxueighteenxu
上一篇 2018-04-03 13:37
下一篇 2018-04-03 14:00

相关推荐

  • 第一周 笔记

    ../返回上一层 相对路径绝对路径    ../../   以根开始绝对路径 不以根开始是相对路径 alias 简化特别长得命令和参数(别名)  unalias去掉别名使用 .bashrc    -a全取消 ls .bashrc 别名目录文件 basename   查看主机名  (取最后的文件名) bc 计算器   obase=几进制  进制转换 clock…

    Linux笔记 2018-04-01
  • 小节

    管道符:cmd1 输出cmd2 输入cmd1 | cmd2如果想将错误信息传给cmd2cmd1 |& cmd2 或 cmd1 2>&1| cmd2加上 >2><&>就是重定向<< key与用户名和组相关的/etc/passwd/etc/shadow 放用户口令的/etc/group/etc/g…

    Linux笔记 2018-04-07
  • Linux 入门基础知识

    Linux第一周作业(计算机组件及功能,Linux发行版本,Linux系统文件目录及基础命令)

    Linux笔记 2018-05-12
  • 数组,字符串切片,高级变量

    数组 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合 数组名和索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引 bash4.0版本之后开始支持 bash –version   查看bash版本 bash的数组支持稀疏格式(索引不连续) 声明数组: de…

    Linux笔记 2018-05-13
  • linux系统修复报错的方法 . 4

    如果/boot目录下所有的文件都丢了怎么办

    2018-05-12
  • 马哥网络班第31期——第二周作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示
    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示
    3、请使用命令行展开功能来完成以下练习
    (1)创建/tmp目录下的:a_c,a_d,b_c,b_d
    (2)创建/tmp/mylinux目录下的:
    4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息
    5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
    6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其他字符)的文件或目录
    7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录
    8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其他任意长度任意字符的文件或目录
    9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22
    10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中
    11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中
    12、复制/etc目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中

    Linux笔记 2018-07-18

评论列表(1条)

  • leo
    leo 2018-04-05 16:34

    写的很认真!