4.0linux定时任务crond
4.1linux定时任务crond服务理论详解
4.1.1crond介绍
Crond服务是linux系统中定期执行命令或指定程序的任务
时间间隔单位是分钟、小时、日、月、周组合,适合周期性的日志分析或数据备份等
4.1.2crontab语法及使用方法
crontab [-u user] filecrontab [-u user] [-l | -r | -e] [-i] [-s]
-l 列出计划任务
-e 编辑任务计划
-u user 对指定的用户设置计划任务
-r 从crontab目录中删除用户crontab文件
-i 删除用户crontab文件前确认提示
4.1.3crontab格式
格式分为七段,前五段是时间段,第六段是以哪个用户执行crontab(默认是当前用户)第七段为执行的命令
[root@localhost shell]# crontab -l*/1 * * * * /bin/sh /root/shell/aaa.sh > /dev/null 2> /dev/null
时间段含义
段 | 含义 | 取值范围 |
第一段 | 分钟 | 00-59 |
第二段 | 小时 | 00-23 |
第三段 | 日 | 01-31 |
第四段 | 月 | 01-12 |
第五段 | 周,0代表星期天 | 0-6 |
特殊符号的含义
* 星号,时间段全是*表示任意时间,例如00 23 * * * command表示一到23点就执行
- 减号,分隔符表示一个时间范围段例如17-19点,00 17-19 * * * command表示17,18,19点都执行
, 逗号,分割时间段例如20 17,18,20 * * * command 表示17,18,20点30分执行
/n n代表数字,每n单位时间例如 */10 * * * * command表示每10分钟执行一次
4.1.4crond权限文件
/etc/cron_deny 该文件存放不能使用crond服务的用户名
/etc/cron_allow 该文件存放能使用crond服务的用户名
/var/spoole/cron/ 该目录存放用户的crontab文件,以用户名命名
4.1.5crontab依赖的服务
/etc/init.d/crond restart
4.1.6cron实例
*/1 * * * * /bin/echo "I am administratory" >> xu.txt
每一分钟执行一次
30 9-11 * * * /bin/sh /scriptas.sh>/dev/null 2>&1
9点30和10点30和11点30执行一次
30 9,11 * * * /bin/sh /scriptas.sh >/dev/null 2>&1
9点30和11点30执行一次
30 9-17/2 * * * /bin/sh /scriptas.sh >/dev/null 2>&1
9点半到17点半中时间每2个小时执行一次
30 23 1,15 * * /bin/sh /scriptas.sh >/dev/null 2>&1
每月的1号15号的23点30分执行一次
30 23 * * 0 /bin/sh /scriptas.sh >/dev/null 2>&1
每星期天的23点30分执行一次
* 19-6/1 * * * /bin/sh /scriptas.sh >/dev/null 2>&1
提示:这样写是不对的,晚上的19点到早上6点,每1个小时执行一次,前面带了个*,星号表示任意时间,也就是晚上的19点到早上6的,每小时的每一分钟执行一次,可以这样写 0 19-6/1 * * * /bin/sh /scriptas.sh
4.1.7生产环境下使用crontab
例1:每分钟执行一次打印自己的名字到/test/xu文件中
#print char task by xu for programmer A at 2012-03-04*/1 * * * * echo "xu" >> /test/xu >/dev/null 2>&1
例2:每周六、日上午9:00和下午14:00来上班(/test/xu)
#cron job for ett by xu 2010-03-0400 09,14 * * 6,0 /bin/sh /test/script.sh >/dev/null 2>&1
说明:
1、写定时任务时写清注释,是个好习惯,如果:什么人,什么时间,因为谁,做了什么事,都写清楚
2、执行任务时可以省略用户,在执行脚本时,尽量带上/bin/sh否则可能因为脚本没有执行权限而无法执行。
3、如果需要root权限执行的任务可以登录到root用户下设置,如果不需要root权限,可以登录到普通用户下设置。特别注意不同用户的环境变量问题,如果调用了环境变量,最好在脚本中将环境变量重新export下
4、定时任务结尾最好加上>/dev/null 2>&1 如需要打印出日志,可以追加到指定的日志文件中。如果不加>/dev/null 2>&1等命令配置,时间长了,可能会导致系统未开启邮件服务,而导致邮件临时目录/var/spool/clientmqueue文件数猛增,占用大量磁盘inode节点
注意:不是所有任务计划后面都加> /dev/null 2>&1如echo命令就不需要,
*/1 * * * * /bin/echo "I am administratory" >> xu.txt >/dev/null 2&>1 这样写是错误的
如果以执行脚本方式就需要加>/dev/null 2>&1
4.1linux定时任务crond服务实战详解
生产环境中把执行命令放到脚本中,以脚本方式执行
4.1.2案例
1、每隔一分钟,打印"+"号到oldboy.log中
#*/1 * * * * /bin/echo '+' >>oldboy.log
没有指定oldboy.log目录,默认会在执行crontab的用户家目录中.生产环境最好加上绝对路径
注意后面就不要在加>/dev/null 2>&1
2、每隔5分钟将/etc/service文件备份到/tmp下(每次备份成不同的文件)
[root@localhost shell]# cat tar.shtar zcfp /tmp/service_$(date +%Y%m%d%H%M).tar.gz /etc/services
[root@localhost shell]# echo "#cron job for ett by xu 2010-03-04" >> /var/spool/cron/root
[root@localhost shell]# echo "*/5 * * * * /bin/sh /root/shell/tar.sh > /dev/null 2>&1" >> /var/spool/cron/root
生产环境中把执行命令放到脚本中,以脚本方式执行
3、每天晚上12点,打包站点目录/var/www/html备份到/data目录下(每次备份成不同的文件)
[root@localhost shell]# cat bak.sh
tar zcfp /data/htmlbak_$(date +%Y%m%d%H%M).tar.gz /var/www/html
[root@localhost shell]# echo "#backup site by xu 2010-03-04" >> /var/spool/cron/root
[root@localhost shell]# echo "00 00 * * * /bin/sh /root/shell/bak.sh > /dev/null 2>&1" >> /var/spool/cron/root
生产环境下需要加上注释,一条命令执行完成
4、把当前时间存放到xu.log中
01 * * * * /bin/echo $(date +\%Y-\%m-\%d_\%H-\%M).txt >>xu.log
在crontabl中需要用转义符屏蔽%号的作用,情况下最好使用脚本方式然后在使用cron去定时执行,这样减少错误
4.1.3生产环境如何调试crontab定时任务
1先测试脚本是否可用
2加入注释和执行脚本在放入到crontab中
3查看crontab中是否有刚才写入的内容
5、在生产环境中,大多是几个小时或几天执行一次任务,如果是每1周执行,为防止出错,我们先把计划任务的时间调成每1分钟执行一次,如果正常执行了,说明没问题,在把时间该回1个月执行。
6、在脚本中加入日志输出,然后把输出内容输出到一个日志中,可以观察是否正确执行了脚本,比如 * * * * 0 /bin/sh /root/shell/script.sh >/root/bak.log
没有评论:
发表评论