定时任务那些事

Crond计划任务概述

Crond是什么

什么是计划任务,计划任务类似于我们平时生活中的闹钟。
在Linux系统的计划任务服务crond可以满足周期性执行任务的需求。
crond进程每分钟会处理一次计划任务,计划任务主要是做一些周期性的任务目前最主要的用途是定时备份数据

不同系统的定时任务和种类

windows 7系统的定时任务

开始→所有程序→附件→系统工具→选择任务计划程序

Linux系统中定时任务调度的工作可以分为以下两个情况:

1、Linux系统自身定期执行的任务工作:系统周期性执行的任务工作,如轮询系统日志,备份系统数据,清理系统缓存等
2、用户执行的任务工作:某个用户或系统管理员定期要做的任务工作,列如每隔5分钟和互联网上时间服务器进行时间同步,每天晚上0点备份站点数据及数据库数据,一般这些工作需要由每个用户自行设置才行。

Crond配置文件详解

/etc/crontab      #Crontab配置文件
/etc/cron.deny     #该文件中所列用户不允许使用crontab命令
/var/spool/cron/*   #所有用户定时文件都存放此目录,文件以用户名命名
/var/log/cron*/    #定时任务执行后的日志文件,可用来回溯

定时任务crond使用说明

[root@iflytek-30 ~]# crontab --help
crontab:无效选项 -- -
crontab: usage error: unrecognized option
Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -e edit user's crontab  #编辑crontab文件内容
 -l list user's crontab  #查看crontab文件内容
 -r delete user's crontab #删除crontab文件内容
注意:crontab -l和-e实际上就是在操作/var/spool/cron/username

crond时间含义

[root@iflytek-30 ~]# cat /etc/crontab 
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 #星期(0和7都代表星期日)
# | | | | |
# * * * * * user-name command to be executed

# * 表示任意时间,就是“每”的意思,举例:如 00 01 * * * cmd表示每月每周每日的凌晨1点执行cmd任务
# - 表示分隔符,表示一个时间范围段,如17-19点,每小时的00分执行任务。00 17-19 * * * cmd。就是17,18,19点整点分别执行的意思
# ,逗号表示分割时间段的意思。30 17,18,19 * * * cmd表示每天17,18,19点的半点执行cmd。
# /n n代表数字,即每隔n单位时间,列如:每十分钟执行一次任务可以写*/10 * * * * cmd

书写Crond定时任务7个基本要领

1、为定时任务规则加必要的注释

#time sync 
* * * * * /usr/sbin/ntpdate time.windows.com >/dev/null 2>&1

2、定时任务命令或程序最好写到脚本里执行

#backup www to /backup
00 00 * * * /bin/sh /server/scripts/www_bak.sh >/dev/null 2>&1

3、定时任务执行的脚本要规范路径,如:/server/scripts,参考上一个 

4、执行shell脚本任务时前加/bin/sh,参考上上个 

5、定时任务结尾加>/dev/null 2>&1,参考上上上个 

注意:如果定时任务规范结尾不加>/dev/null 2>&1,很容易导致硬盘inode空间被占满,从而系统服务不正常。 

6、在指定用户下执行相关定时任务:这里要特别注意不同用户的环境变量问题,如果是调用了系统环境变量/etc/profile,最好在程序脚本中将用到的环境变量重新export下,可以在脚本中直接定义. /etc/profile 

7、生产任务程序不要随意打印输出信息:在调试好脚本程序后,应尽量把DEBUG及命令输出的内容信息屏蔽掉,如果确实需要输出日志,可定向到日志文件里,避免产生系统垃圾。

Crond配置编写实列

#每天凌晨切割nginx⽇志
00 00 * * * /bin/sh /soft/scripts/cut_nginx.sh &> /soft/scripts/log/nginx.log
#每天5点备份数据库
00 05 * * * /bin/sh /soft/scripts/dump_sql.sh &>/soft/scripts/log/mysql.log
#每5分钟检测数据库是否正常
*/5 * * * * /bin/sh /soft/scripts/start_mysql.sh &>/dev/null

#注意:
#1.我们所有的crond服务是运行的程序。而crontab命令是用户用来设置定时规则的命令
#2.crond服务是企业生产工作常用的重要服务
#3.几乎每个服务器都会用到crond服务

Crond计划任务调试

1.调整任务每分钟执行,检测是否是正常,有些任务不要频繁执行
2.调整系统时间然后在检测任务,生产不建议直接使用此方式
3.执行脚本,将脚本执行输入写入指定日志文件,观察日志内容是否正常
4.注意一些任务命令带来的问题echo "xujun" >>/tmp/xujun.log &>/dev/null
5.命令使用绝对路径,防止无法找到命令导致定时任务执行故障
6.查看/var/log/cron日志进行调试
建议:将需要定期执行的任务写入脚本中,建立/server/scripts目录统一存放脚本,脚本中命令必须使用绝对路径,手动执行脚本检测输出是否正常,然后将脚本加入计划任务测试,测试后无问题将脚本输出写入对应的日志文件中即可。

猜你喜欢

转载自www.cnblogs.com/xujun1270/p/11280781.html
今日推荐