linux的定时任务crond(crontab)服务
1、crond是什么?
crond是linux系统中用来定期执行命令或者指定程序任务的一种服务或软件。
一般在安装完C5/C6系统的时候,crond就会默认存在了。
2、linux定时任务分类:
1)系统自身的定期执行的任务;
2)用户执行的定时任务。
a)at适合执行一次就结束的调度任务。突发性的任务,每天晚上。了解即可。依赖服务atd.
b)anacron适用于非7*24小时开机的服务器准备的。开机执行的,检测停机期间没有执行的任务,在开机后一次性执行一遍。
c)crond,按事先定义号的规则执行定时任务。是企业生产工作中重要的服务。
3、crontab指令
1)选项
-l 查看crontab文件的内容。
-e 编辑crontab文件的内容。
crontab {-i|-e} 实际上就是在操作/var/spool/cron/当前用户的文件。
2)定时任务的指令格式:
用户的定时任务一般分为6个段(每段用空格来分隔),系统的定时任务为/etc/crontab,分为8段,空格来分隔),前5段为时间的设定段,第6段位所要执行的命令或脚步任务段。
root@jackroo cron.daily]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# 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
crontab语法格式时间段含义
第一段 分钟 00-59(00也可以是0)
第二段 小时 00-23
第三段 日,天 01-31
第四段 月 01-12
第五段 星期,周 0-7(0,7都代表星期日)
crontab语法中的特殊符号含义
*
表示任意时间,实际就是“每”时间的意思。00 23 * * * cmd 表示每月每周每日的23:00都执行cmd任务。
-
表示分隔符,表示一个时间范围,区间段,如00 17-19 * * * cmd。就是17,18,19点整点分别执行的意思。
,
表示分隔时段的意思。30 17,17,19 * * * /scipts/boy.sh 表示每天17,18,19点半执行脚本。
/n
n代表数字,即“每隔n单位时间”,如*/10 * * * * cmd,*/10 *的范围是0-59,也可以写成0-59/10。
crontab编辑的定时任务依赖的服务。
[root@jackroo cron.daily]# chkconfig --list crond
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@jackroo cron.daily]# /etc/init.d/crond status
crond (pid 804) is running...
[root@jackroo cron.daily]# ps -ef|grep crond|grep -v grep
root 804 1 0 20:08 ? 00:00:00 crond
[root@jackroo cron.daily]# /etc/init.d/crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
4、实例演示:
1)每分钟打印一次自己的名字拼音到“/server/log/自己的名字命名的文件"中。
#echo my name to /server/log/lt.log
* * * * * echo oldboy >>/server/log/lt.log
2)生产环境定时任务的专业写法。
要领1:为定时任务规则加必要的注释,最好是英文注释;
要领2:执行shell脚本任务前加/bin/sh;否则可能因为忘了为脚步设定执行权限x,而无法完成任务。
要领3:定时任务结尾加>/dev/null 2>&1;等价于1>/dev/null 2>/dev/null
要领4:超过2行的命令执行,最好用脚步文件。
要领5:在指定用户下执行相关定时任务。
[root@jackroo spool]# crontab -u oldboy -l
no crontab for oldboy
要领6:生产任务程序不要随意打印输出信息。
要领7:定时任务执行的脚本要规范路径。
要领8:配置定时任务规范操作过程。
1)首先要在命令行操作成功,然后复制成功的命令到脚本里,在各个细小环节减少出错的机会。
2)然后测试脚本,测试成功后,复制脚本到定时任务配置里,不要手敲。
3)先在测试环境下测试,然后正式环境规范部署。
3)/var/spool/clientmqueue文件过多导致inode被消耗尽。no space left on device.
这么多文件哪来的?定时任务没有加 >/dev/null 2>&1