linux计划任务

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

未来的某时间点执行一次某任务:at,batch

周期性运行某任务:crontab

执行结果: 会通过邮件发送给用户, 存放在/var/spool/mail/UserName

~]# ss -tnl 或者 ~]# netstat -tnlp  查看是否有25号端口打开,来判断本机的邮件服务是否正常打开

本地电子邮件服务:

smtp协议: simple mail transmission protocol,简单邮件传递协议

pop3: post office protocol

imap4: internet mail access protocol

mail命令:

mailx – send and receive Internet mail (CentOS 7)

MUA: Mail User Agent, 用户收发邮件的工具程序

mailx [-s 'SUBJECT(标题)'] UserName[@hostname]

邮件正文的生成:

(1) 交互式输入, . 单独成行可以表示正文结束, ctrl + d提交亦可

(2) 通过输入重定向

(3) 通过管道

at 命令  

需要atd服务启动

/var/spool/at

at [option]… [TIME]

TIME:

HH:MM[YYYY-mm-dd]

noon: 中午

midnight: 午夜

teatime: 下午4点

tomorrow: 明天

now + #: 指定从现在延迟多久后执行作业任务

UNIT(单位): minutes, hours, days, weeks

at的作业有队列, 用单个字母表示, 默认都使用a队列

常用选项:

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

-f /Path/From/File: 从文件中读取作业任务, 而不用再交互式输入

-d #: 删除指定号码的任务, 相当于atrm #

-c #: 查看指定号码的作业的具体内容 

-q QUEUE: 指明队列

注意: 作业的执行结果是以邮件发送给提交作业的用户

/etc/at.allow文件比/etc/at.deny文件的优先级高

batch 命令

batch会让系统自行选择在系统资源较空闲的时间去执行指定的任务

周期性任务计划: cron

/var/spool/cron/username

需要服务程序始终处于运行状态: 

cronie: 主程序包, 提供了crond守护进程及相关辅助工具

/etc/cron.allow和 /etc/cron.deny

确保crond守护进程(daemon)处于运行状态;

CentOS 7: systemctl status crond.service

CentOS 6: service crond status

向crond提交作业的方式不同于at, 需要使用专用的配置文件, 并且此文件有固定格式, 不建议使用文本编辑器直接编辑此文件, 要使用crontab命令

crond任务分为两类

系统crond任务: 主要用于实现系统自身的维护

手动编辑: /etc/crontab 文件

用户crond任务: 

命令: crontab 命令

系统cron的配置格式:

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)每一行定义一个周期性任务, 共七个字段

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

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

command to be executed: 要执行的任务

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

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

用户crond的配置格式

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) 邮件发送给当前用户

时间表示法:

(1) 特定值

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

注意: day of week和day of month一般不同时使用

(2) * 

给定时间点上有效取值范围内的所有值; 表示"每…"

(3) 离散取值: ,

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

#,#,#

(4) 连续取值: – 

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

#-#

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

*/#: #即步长

*/2: 

注意:

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

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

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

示例:

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

(2) 3 4 * * 5: 每周五的 4:03 执行

(3) 5 6 7 * *: 月任务, 每月7号的 6:05执行

(4) 7 8 9 10 *: 年任务, 每年的10月9日8:07执行

(5) 9 8 * * 3,7: 每周三、日的8:09执行

(6) 0 8,20 * * 3,7: 小于指定时间点的时间要给与一个时间点

(7) 0 9-18 * * 1-5:

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

crontab 命令:

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

-e: 编辑任务, 自动调用编辑器打开模板文件

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

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

-i: 交互式删除任务, 配合 -r 选项使用

-u user: root用户可为指定用户指定计划任务

注意: 运行结果以邮件通知当前用户; 如果拒绝接收邮件

(1) COMMAND > /dev/null: 只发送错误邮件

(2) COMMAND &> /dev/null

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

如果某任务在指定的时间因关机未能执行, 下次开机不会自动执行, 如果期望下次开机后无论是否到了相应时间点都要执行一次, 可使用anacron实现

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

(0)
black_fishblack_fish
上一篇 2016-09-19
下一篇 2016-09-19

相关推荐

  • n22-第一次作业-对Linux基础知识的回顾

    1、描述计算机的组成及其功能   根据冯诺依曼计算机体系结构模型,计算机由运算器、控制器、存储器、输入设备、输出设备五大部分组成。如上图:    运算器主要由算数逻辑单元ALU和通用寄存器组成,主要用于完成算术运算和逻辑运算。      控制器是整个计算机的控制中心,它的主要功能是周而复始…

    Linux干货 2016-08-15
  • 初学正则表达式

      前言:     在学正则表达式之前,有小伙伴讲解说,正则表达式在文本处理上功能非常强大、使用非常普遍,并且现在很多的工具软件都支持它,以后的学习工作中会经常使用,非常灵活,但是灵活的同时又是繁琐,需要小心翼翼的仔细推敲。抱着认真、好奇的心思听完了王老的课。我自己理解的正则表达式是,给一些符号赋予一定的涵义…

    Linux干货 2016-08-12
  • 作业–权限管理

    1、当用户wangcai对/testdir目录无写权限时,该目录下的只读文件file1是否可修改和删除? [root@liang testdir]# su wangcai [wangcai@liang testdir]$ ll -a 总用量 8 drwxr-xr-x. &nbsp…

    Linux干货 2016-08-05
  • Linux文件管理

    Linux文件管理 Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 cd cd命令用来切换工作目录至dirname。 其中dirName表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的home directory(也就是刚login时所在的目录)。另外,~也表示为home directory的意思,.则是表示目前所在的…

    2017-10-01
  • 用“逐步排除”的方法定位Java服务线上“系统性”故障

    一、摘要 由 于硬件问题、系统资源紧缺或者程序本身的BUG,Java服务在线上不可避免地会出现一些“系统性”故障,比如:服务性能明显下降、部分(或所有)接口超 时或卡死等。其中部分故障隐藏颇深,对运维和开发造成长期困扰。笔者根据自己的学习和实践,总结出一套行之有效的“逐步排除”的方法,来快速定位Java 服务线上“系统性”故障。 二、导言 Java 语言是广…

    2015-02-28
  • Puppet基于Master/Agent模式实现LNMP平台部署

    前言 随着IT行业的迅猛发展,传统的运维方式靠大量人力比较吃力,运维人员面对日益增长的服务器和运维工作,不得不把很多重复的、繁琐的工作利用自动化处理。前期我们介绍了运维自动化工具ansible的简单应用,本期带来的是运维自动化神器puppet基于Master/Agent模式实现LNMP平台部署。 Puppet 简介 Puppet是基于ruby语言开发的一种L…

    Linux干货 2015-07-13