您的位置:首页 > 其它

crontab

2016-03-26 15:22 190 查看
1.crond是什么?
crond是linux系统中用来定期执行命令和或者指定程序任务的一种服务或软件,一般在安装完Centos5/6系统的时候,crond就会默认存在了 2.为什么需要定时任务?
服务器7*24,重要业务实时备份 3.crond工作原理
crond服务默认每分钟,会检查系统中是否有需要执行的定时任务,如果有就会根据事先定义好的规则来指定这个定时任务 4.linux定时任务分类
a.系统自身定期执行的任务,如/var/log/messages
b.用户执行的定时任务
c. at执行一次就结束的调度任务,依赖服务atd
d. anacrontab适合非7*24服务器准备的,开机执行的,检测停机期间没有执行的任务,在开机后一次性执行一遍
e. crond,crond服务默认情况(每分钟),会检查系统中是否有需要指定的定时任务,如果有就会根据事先定义好的规则来执行这个定时任务。crond依赖crond服务进程。crond是一个守护进程,,通过crontab命令是用户用来设置定时任务规则的命令。

5. 默认crondab的配置文件为/var/spool/cron/root
[root@Centos6 ~]# crontab -l   ==  cat /var/spool/cron/root
[root@Centos6 ~]# crontab -e   ==  vim /var/spool/cron/root

注:crontab -e 会检查语法,而vim编辑则不会。和visudo一样。

6.使用者权限及定时任务文件
文件说明
/etc/cron.deny/var/spool/cron/
/etc/cron.allow该文件中所列用户允许使用crontab命令,优先于
/var/spool/cron/所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名
7.指令的使用格式
默认情况下,当用户建立定时任务规则后,该规则记录对应的配置文件会存在于/var/spool/cron中,其crontab配置文件对应的文件名与登录的用户名一致,如:root用户的定时任务配置文件为/var/spool/cron/root。
Crontab定时任务的书写格式很简单,用户的定时任务规则一般分为6个段(每个段通过空格来分隔,系统的定时任务为/etc/crontab,分为8段,空格来分隔),前五段为时间的设定段,第六段为所要执行的命令或脚本任务段。基本格式如下:
01 * * * * cmd
02 4 * * * cmd
提示:
1、cmd为要执行的命令或脚本,列如/bin/bash /server/scripts/szk.sh
# 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 beexecuted

8、crontab语法格式中时间段的含义如下表
含义取值范围
第一段0-59
第二段0-23
第三段0-31
第四段0-12
第五段0-6(0=7)
9、crontab语法格式中特殊符号含义如下表
特殊符号含义
*表示任意时间都,实际就是“每”时间的意思。列:00 23 * * * cmd表示每月每周每日的23:00都执行cmd任务。
-表示分隔符,表示一个时间范围,区间段,如17-19点,每天的17,18,19的00分执行任务。
逗号,表示分隔时段的意思。30 17,18,19 * * */bin/sh /scripts/szk.sh表示每天17、18和19点半点执行szk.sh脚本
/n
N代表数字,即“每隔n单位时间”,列如:每10分钟执行一次任务可以写成*/10 * * * cmd,其中,*/10,*代表0-59,也可以写成0-59/10
10、 crontab编辑的定时任务依赖的服务
[root@Centos6 ~]# chkconfig --list crond       #检查服务是否开启
crond              0:off    1:off    2:on 3:on 4:on 5:on 6:off
[root@Centos6 ~]# /etc/init.d/crond status     #检查进程状态
crond (pid  961) is running...
[root@Centos6 ~]# ps -ef | grep crond | grep -v grep
root        961      1 0 14:50 ?        00:00:01 crond
[root@Centos6 ~]# /etc/init.d/crond restart
Stopping crond:                                           [  OK  ]
Starting crond:                                           [  OK  ]


11、 举例:30 2,12 * * * /bin/bash /scipts/szk.sh 每天3:30和12:30执行这个脚本30 */6 * * * /bin/bash /scipts/szk.sh 每隔6个小时的半点时刻执行这个脚本30 8-18/2 * * * /bin/bash /scipts/szk.sh 8:00到18:00每隔2小时执行这个脚本30 21 * * * /application/apache/bin/apachectl graceful 每天21:30重启apache服务45 4 1,10,22 * * /application/apache/bin/apachectl graceful 每个月的1,10,22号的4:45重启Apache服务10 1 * * 6,0 /application/apache/bin/apachectl graceful 每周六周日的1:10重启apache服务0,30 18-23 * * * /application/apache/bin/apachectl graceful 每天的18:00和23:00的整点和半点重启apache服务00 */1 * * * /application/apache/bin/apachectl graceful 每隔一个小时的整点重启一次Apache服务注:周和日尽量不要同时用,因为周和日不一定同步12、生产环境Crontab专业实例
书写crontab定时任务多个基本要领

每分钟打印一次自己的名字到“/server/log/*文件中
#需要做好注释 print a name
* * * * * echo szk >> /server/log/szk.log  #/server/log目录必须要存在


2.要领:
a.加必要注释:写定时任务规则时尽可能的加上注释,这是个好的习惯和规范。
b.执行shell脚本任务前加/bin/bash,执行任务时,如果是执行脚本,请尽量在脚本前面带上/bin/bash命令,否则有可能因为忘了为脚本设定执行权限X,从而以为OK了
c. 在指定用户下执行相关定时任务,需要root权限执行的任务可以登陆到root用户下然后设置,如果不需要root权限,可以登陆到普通用户下(也可以直接在root下crontab -u szk -e的写法直接设置),然后设置。这里要特别注意不同用户的环境变量问题,如果是调用了系统环境变量/etc/profile(如生产场景中java程序的定时任务),最好在程序脚本中将用到的环境变量重新export下。
d.定时任务命令结尾加>/dev/null2>&1 等内容,如果需要打印日志,则可以追加到指定的日志文件里(此时不要和/dev/null同时存在),尽量不要留空。如果任务时命令的话,结尾使用“>/dev/null 2>&1”时要多测试下,要有检查手段。
其中,>表示重定向,/dev/null为特殊的字符设备文件,表示黑洞设备或空设备。2>&1表示让标准错误和标准输出一样,本命令内容即把脚本的正常和错误输出都重定向导/dev/null,即不记录任何输出。>或1> 输出重定向:把前面输出的东西输入到后边的文件中,会删除文件原有内容>>或1>> 追加重定向:把前面输出的东西追加到后边的文件中,不会删除原件原有内容<或<0 输入重定向:后跟字符串,用来表示“输入结束”,也可用Ctrl+d来结束输入<<或<<0 输入重定向:后跟字符串,用来表示“输入结束”,也可用ctrl+d来结束输入2> 错误重定向:把错误信息输入到后边的文件中,会删除文件原有内容2>> 错误追加重定向:把错误信息追加到后边的文件中,不会删除文件原有内容>/dev/null 2>&1 等价于1>/dev/null 2>/dev/null #将正确和错误的输出输入为空
13、生产任务书写规范
为定时任务规则加必要的注释
执行shell脚本任务前加/bin/bash
定时任务命令或脚本的结尾加> /dev/null 2>&1
定时任务命令的执行,最好用脚本文件
在指定用户下指定相关定时任务
生产任务程序不要随意打印输出信息
定时任务执行的脚本要规范路径
时间变量要用反斜线,$(date+\%Y\%m\%d)
切到目标目录的上一级打包目标
配置定时任务规范操作过程:命令行测试à测试成功后à复制脚本的路径到定时任务配置里à现在测试环境下测试,然后正式环境规范部署

14.rontab日志,/var/log/cron

15.企业生产场景如何调试crontab定时任务
a. 在调试时,把任务执行频率调快一点,看能否执行,如果正常没问题后,再更改成需要的执行时间。
强调:有些计划任务是不允许频繁执行的,列如:定时往数据库里插入数据,这样的任务就要在测试机上测试好,然后部署到正式线上,这样正式工作出问题的机会就少了。规范的公司开发和运维人员操作流程:个人的开发配置环境à办公室的测试环境àIDC机房的测试环境àidc机房的正式环境 16.工作中调试定时任务的方法
a.增加执行任务频率调试任务
b.调整系统时间调试任务
c.通过脚本日志输出调试定时任务
d.注意一些任务命令带来的问题
e.注意环境变量导致的定时任务故障
f.通过crond定时任务服务日志调试定时任务 tail -f /var/log/cron

本文出自 “抚琴煮酒” 博客,请务必保留此出处http://szk5043.blog.51cto.com/8456440/1755469
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: