linux定时任务
一、定时任务Crond介绍
1、Crond是什么?
Crond 是linux 系统中用来定期执行命令或指定程序任务的一种服务或软件。一般情况,我们安装完Centos5/6 linux操作系统之后,默认便会启动Crond任务调度服务,在我们前面的系统安装及开机启动优化的设置中,我们也设置保留了Crond开机自启动。crond服务会定期(默认每分钟检查一次)检查系统中是否又要执行的任务工作。如果有,便会根据其预先设定的定时任务规则自动执行改定时任务工作。这个crond定时任务服务就相当于我们平时早起使用的闹钟一样。
2.特殊需求:(秒级别)crond服务就无法搞定了,一般工作中写脚本守护进程执行。
程序文件:程序代码组成,但是没有在计算机内执行。当前没有执行。
进程:所谓进程就是计算机中正在执行的程序。
守护程序或守护进程:守护进程就是一直运行的程序。
3、为什么要使用Crond定时任务?
我们举个例子说明:例如:我们的数据库或者代码程序需要每天晚上0点做一次全备,这样每天夜里都需要执行的周期性的工作,如果要让人操作的话,就得每天半夜爬起来,然后登陆系统执行任务,执行完接着睡觉。另外,执行任务的过程也可能持续几个小时,这样以来一个晚上我们就都不用睡觉了,这样显然是不行的。那么有什么办法来解决这个周期性的执行任务需求昵?
答:这就是linux系统的定时任务Crond,这相当于我们平时生活中的的闹钟的功能,每天晚上提前设置定时,早晨按时叫醒你。实时备份,定时备份。
4、不同系统的定时任务:
4.1.windows:开始-->所有程序-->附件-->系统-->选择“任务计划程序”
4.2.linux:
1)linux系统自身定期执行的任务工作:系统周期性自行执行的任务工作,如轮询系统日志、备份系统数据、清理系统缓存等,无需人为干预。
2)用户执行的任务工作:某个用户或系统管理员定期要做的任务工作,例如:没个五分钟和互联网上的时间服务器进行时间同步(这是安装系统基础优化部分的内容),每天晚上0点备份网站站点数据及数据库数据,一般这些工作需要有每个用户自行设置才行。所谓的用户就是读者或者在做的伙伴们。例如:服务器时间同步
5、linux系统中定时任务调度的工作可以分为以下两种:
5.1.linux系统自身定期执行的任务工作:系统周期性自行执行的任务工作,如轮询系统日志、备份系统数据、清理系统缓存等,这些任务无需我们人为干预。
5.2、用户执行的任务工作:某个用户或系统管理员定期要做的工作。
6、linux系统下定时任务软件种类:
6.1.at:适合仅执行一次就结束的调度任务命令。对应的服务是atd
6.2.*****crontab:可以周期性的执行任务工作。对应的服务是crond。必须掌握。
6.3.anacron:这个命令主要用于非7*24小时开机的服务器准备的。anacron并不能指定具体是时间执行任务工作,而是一天为周期或者在系统每次开机后执行的任务工作。它会检测服务器停机期间应该执行,但是并没有进行的任务工作,并将该任务执行一遍。
6.4提示:
1).crond服务是运行的程序,而crontab命令用户用来设置定时规定的命令。
2).crond服务是企业生产工作中常用的重要服务,at和anacron很少使用,可以忽略。
3).几乎每个服务器都会用到crond服务。
4).上千个服务器可以开发分部式定时任务项目方案。
7、定时任务的使用说明:
用法:crontab -l 查询定时任务(当前用户下的定时任务)
crontab -e 编辑定时任务
crontab -u 指定用户
路径:/var/spool/cron
crontab -e(检查语法) == vi /var/spool/cron/root
crontab -l == cat/var/spool/cron/root
格式:查看系统定时任务:/etc/crontab
用户定时任务:crontab时间:分时日月周分别代表五个星
特殊符号:* “每”的意思
- 取值范围(17-19)
, 分割时间段的意思
/n n代表数字,及每隔(多长时间)执行...
8、cron process图解:
二、使用者权限及定时任务文件
1、定时任务文件说明:
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件所列用户允许使用crontab命令,优先于/etc/cron.deny
/var/spool/cron/ 所有用户crontab配置文件默认都存放在次目录,文件名以用户命名。
[root@oldboy ~]# cat /var/spool/cron/root
#gengxin shiijan
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
通过crontab查看或编辑的定时任务规则默认都会放到/var/spool/cron/,以当前用户命名文件。
定时任务也可以针对普通用户设置,可以/etc/cron.deny设置禁止执行定时任务的用户。
crontab �e === vi /var/spool/cron/root
crontab �l === cat /var/spool/cron/root
2、crontab指令选项说明含义表:
系统帮助:
usage:crontab[-u user] file
-s (selinux context)
3、定时任务指令的使用格式
默认情况下,当用户建立定时任务规则后,该规则记录对应的配置文件会存在于/var/spool/cron中,其crontab配置文件对应的文件名与登录的用户名一致,如:root用户的定时任务配置文件为/var/spool/cron/root。
crontab定时任务的书写格式很简单,用户的定时任务规则一般分为6个阶段(没个段通过空格来分隔,系统的定时任务为/etc/crontab,分为7段,空格来分隔),前5段为时间的设定段,第6段为所要执行的命令或脚本任务段。
4、crontab语法格式中时间段的含义如下表:
5、crontab语法格式中特殊符号含义如下表:
三、书写定时任务的方法:
1、书写规范:
1.1、注释[规范和习惯]
1.2、命令放脚本文件里[规范和习惯]
1.3、进入目标的上数目录打包。
1.4、命令再命令行测试好,然后复制后放入脚本。
1.5、脚本文件要放在固定的规范的目录/server/scripts。
1.6、取消tar命令及脚本内的无用输出。
1.7、脚本名字用.sh结尾。
1.8、脚本前面要用/bin/sh执行脚本,并且脚本也要全路径。
1.9、复制执行的全路径的脚本到定时任务里配置,或者配置好定时任务后,复制定时任的命令到命令行测试。
1.10、定时任务的结尾要加上>/dev/null 2>&1
2、书写定时任务的若干要领方法:
2.1、为定时任务规则加必要的注释
2.2、执行shell脚本任务前加/bin/sh
2.3、定时任务命令或脚本结尾加 >/dev/null 2>&1
&>/dev/null,1>/dec/null 2>/dev/null
2.4、定时任务命令或程序最好写到脚本里执行
2.5、在指定用户下执行相关的定时任务
2.6、生产任务程序不要随意打印输出信息
Tarzcvf echo 123 >a.log
2.7、定时任务执行的脚本要规范路径(/server/scripts)
2.8、配置定时任务规范操作过程
3、老鸟谈生产场景删除文件及目录经验要领
常在河边走,哪有不湿鞋!如果遵守老男蔹的要领就可以少湿鞋甚至不湿!+
3.1、用mv替代rm,不着急删,而是移动到回收站/tmp。
3.2、删除前务必备份,最好异机备份。
3.3、如果非要删除用find替代rm,包括定时任务等动作清理。
3.4、如果非要rm删除,,请先切换目录在删,能不用通配符就不用通配符+
例如:
[root@oldboy /]#cd /oldboy/
[root@oldboy/]#rm -f test1 test2
3.5、如果非要用通配符,请按下面方法:
[root@oldboy/]#cd /oldboy/
[root@oldboy oldboy]# rm -fr./* #加上./
禁止使用rm -fr /oldboy/*,这个命令如果多了空格可能会带来灾难
[root@oldboy/]#rm -fr /oldboy/*
例如:rm -fr /oldboy/*,*的前不小心多了空格,会删除当前目录所有内容。
[root@oldboy /]# rm -fr /oldboy/* 会把当前目录根下全删了。
4、工作中调试定时任务的方法
4.1、增加执行任务频率调试任务
每分钟或者系统时间之后5分钟执行,看看结果对不对。
某些任务不能用于生产环境没有测试机会
代码、配置变更发布流程:
个人开发环境 --- 办公测试环境 --- >IDC机房测试环境--->IDC正式环境(分组,灰度发布)。
4.2、调整系统时间调试任务(不能直接用于生产环境),保持5分钟。
4.3、通过脚本日志输出调试定时任务
4.4、注意一些任务命令带来的问题
例如:
*/1 ** * * echo ”==”>> /tmp/oldboy. log >/dev/null 2>&1
*/1 ** * * tar zvcf /tmp/oldboy_$(date +%F). tar. gz /etc/hosts >/tmp/oldboy.log
4.5、注意:环境变量导致的定时任务故障(java)
4.6、通过crond定时任务服务日志调试定时任务(/var/log/cron)
4.7、其他稀奇古怪的问题调试的办法
4.8、sh -x 调试脚本