码迷,mamicode.com
首页 > 其他好文 > 详细

cron任务计划

时间:2015-09-08 07:20:15      阅读:491      评论:0      收藏:0      [点我收藏+]

标签:linux任务计划   ron   rond   rontab   

日期: 2015年09月05日



任务计划:

任务计划分为两种:

1、在未来时间点一次性执行某任务,用到的工具: at、batch

2、在未来时间内周期性执行某任务,用到的工具: cron


查看系统监听端口:

ss -tnl

netstat -tnl


================================================================================

电子邮件服务:


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

/var/spool/mail/USERNAME

pop3:post office protocol 邮局协议

imap4:internet mail access protocol互联网访问协议


邮件服务启动与否状态查看: netstat -tnl 或 ss -tnl

[root@CentOS-6 ~]# netstat -tnl | grep ‘:\<25\>‘

tcp    0    0    127.0.0.1:25    0.0.0.0:*    LISTEN    

tcp    0    0    ::1:25          :::*         LISTEN    


127.0.0.1:25 表示此服务的端口仅监听在本地的回环接口上,默认收发邮件

仅能在本机上的用户间进行,且只能通过回环接口上的地址进行。


================================================================================


mail命令

用法:

mail:进入交互式收发邮件接口

q: 退出

N: 查看第N封邮件

mail -s "SUBJECT" Username@Hostname

mail -s "SUBJECT" Username@Hostname < /PATH/FROM/SOMEFILE

COMMAND | mail -s "SUBJECT" Username@Hostname



<<========================================at========================================>>

at命令

 

功能:

承载未来时间运行的某作业,支持使用作业队列,默认为a队列。

 

格式:

at [OPTION]... TIME

at -f /PATH/FROM/SOMEFILE  TIME

 

Ctrl+d 提交作业

作业结果:以邮件形式发送给系统上的当前用户

 

TIME:

(1)精确时间

HH:MM

MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YYor  [CC]YY-MM-DD

tomorrow

(2)相对时间

now+UNIT

minute、hour、day、week

(3)模糊时间

noon 正午12:00

midnight 午夜0:00

teatime 下午16:00

 

常用选项:

-q QUEUE: at任务作业队列

-f /PATH/FROM/SOMEFILE...TIME: 从指定的文件中读取要运行的任务作业

-l: 查看队列中的待运行作业列表,相当于atq命令

-c AT_JOB_NUM: 查看指定待运行作业的内容

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

 

 

<<========================================batch========================================>>

batch命令

功能:

由系统自行选择在资源较为空闲的时间点运行指定的任务

 

 

 

周期性任务计划:cron

CentOS 5:vixie-cron

CentOS 6/7:cronie

 

周期性任务计划需要服务作为后台支撑,该依靠守护进程:crond

可使用 service crond status 查看crond是否处在运行状态

crond (pid 1492) is running...   //表示服务正在运行

 

 

cron任务分为两类:

(1) 系统cron任务:没有默认运行用户身份,所以需要额外指定运行者

配置文件:/etc/crontab

 

(2) 用户cron任务:由某个用户所提交,默认以提交者身份运行,无需额外指定运行者。

配置文件:/var/spool/cron/USERNAME

cron配置文件中每行定义一个独立的任务

 

注意:建议在定义cron任务时,所用到的命令使用绝对路径;如果是脚本,

脚本中的命令需使用绝对路径,或自定义一个拥有完整路径的系统环境变量。

 

系统cron一般很少手动去编辑,大多数情况都是定义用户cron

使用vi编辑cron任务,无法检查语法错误,建议使用crontab命令,不建议使用vim命令

 

 

配置文件范本:

 

SHELL=/bin/bash   //定义用哪个shell用来解释运行的任务

PATH=/sbin:/bin:/usr/sbin:/usr/bin   //用来定义任务中要执行命令的路径

MAILTO=root   //表示系统cron任务运行后把邮件发送给哪个用户

HOME=/   //定义当前系统cron自己的家目录

 

# Fordetails 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) ORsun,mon,tue,wed,thu,fri,sat

#|  | |  |  |

#*  * *  *  * user-name command to be executed

 

共有7个字段组成:

前5个字段:时间点(周期性任务的时间点)

user-name: 说明以哪个用户的身份运行任务

command to be excuted: 指明要运行的任务

 

共5个时间点:

分钟:有效取值范围0-59

小时:0-23

日:1-31

月:1-12

周几:0-7

 

注意:几月几号与周几,不建议同时使用

 

时间点表示法:

对应时间点有效取值范围内的每个时间点

一个特定的连续时间范围:3-7

一个离散的时间点: 3,5,7

/#  有效时间范围内的每多少时间,用于指定频率

*/# 在对应的时间位有效取值上每#个时间单位一次

 

 

例如:15 8 5 3*   //表示每年3月5日8点15分 *表示周几不做限定

 

例如:5 20 10 **   //表示每月10日20点05分 后面两个 * 表示不对年和周几做限定

 

例如:30 18 * *3   //表示每周三的18点30分

 

例如:0 3 * * *   //表示每天的3点, 后面的三个 * 表示不对年、月、周几做限定

 

例如:30 * * **  //表示每小时的30分钟运行任务

 

例如:* * * **   //表示每分钟任务(最小时间单位为分钟)

 

例如:* */3 * ** /bin/echo "hello"   //表示当每三个小时到达时,这个小时内每一分钟都运行

 

例如:15 */3 * ** /bin/echo "hello"   //表示每三个小时运行一次,(分钟一定得是有效取值范围)

 

例如:*/3 * * ** /bin/echo "hello"   //表示每三分钟运行一次后面命令

注意:对无法等分的数字,无法用这个格式指定,如:并不能精确做到每7分钟一次

 

例如:5 7 * *1-5 /bin/echo "hello"   //表示周一到周五,每天的7点5运行后面的命令

 

例如:5 7 * *2,4,6 /bin/echo "hello"  //表示每周二、四、六的7点5分运行后面的命令

 

 

思考:

1、如果想实现每8分钟运行一次某任务,如何编写

2、如果想每10秒运行一次某任务,如何编写

 

 

 

用户cron任务定义:

 

<<========================================batch========================================>>

crontab命令

 

格式:

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

-u user: 不是管理自己的cron任务,而是指定的目标用户的cron任务,仅root拥有管理其他用户的cron任务的权限,默认管理自己的

-l list,列出任务

-r remove,移除所有任务(注意:删除一个任务应该通过编辑界面删除行实现)

-e edit,打开编辑界面定义corn任务

crontab -e -u USERNAME

 

 

补充性的工具:anacron

为cron提供了补充机制,在每次开机后检查crontab中的所有任务,是否在过去计划周期内被执行,如果任务没被执行它会尽快启动。

 

 

注意:任务运行后的结果,以邮件发送给任务相关用户

(1)、如果不想接收任务执行结果的通知邮件,丢弃邮件通知可使用输出重定向

COMMAND > /dev/null

COMMAND &> /dev/null

COMMAND > /dev/null 2>&1

(2)、对于crontab文件来讲,%有特殊功用;如果crontab中命令需要使用%

要记得对其转义或者使用单引号对其引用

* * * * * /bin/touch /tmp/test-$(date+\%F-\%H-\%M-\%S)

* * * * * /bin/touch /tmp/test-$(date+‘%F-%H-%M-%S‘)

 

 

 

练习:

1、每周一到周六的凌晨3点20分,运行tar命令对/etc/目录进行归档另存,存储位置为/backups/etc-YYYY-MM-DD.tar.xz;

//事先创建好/backups目录,键入 crontab -e 编辑cron任务

技术分享

    //编辑完后使用crontab-l 列出任务

技术分享

//修改系统时钟,验证corn任务是否被执行

技术分享


 

2、每周日凌晨2点30分,运行cp命令对/etc/fstab文件进行备份,存储位置为/backups/fstab-YYYY-MM-DD-hh-mm-ss

 //使用命令crontab -e 编辑cron任务列表,新增一行任务

技术分享


//修改时间,验证任务是否被执行

技术分享



3、每天晚上12点,取得/proc/meminfo文件中所有以S或M开头的行,追加至/statistics/meminfo.txt文件中,且每天的消息之前,要加上类似===============分隔线

 //事先创建好/statistics目录,然后编辑cron任务文件

技术分享


//修改系统时间验证任务是否被执行

技术分享


 

 


cron任务计划

标签:linux任务计划   ron   rond   rontab   

原文地址:http://yao3800.blog.51cto.com/1522113/1692462

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!