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图解:

wKioL1ceMueg38buAACUcm-F4dw226.png

二、使用者权限及定时任务文件

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指令选项说明含义表:

wKiom1ceMrDTBI_fAABQcZ-PMF4648.png

系统帮助:

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语法格式中时间段的含义如下表:

wKioL1ceM8jShqbEAAA3JmvjvSs946.png

5、crontab语法格式中特殊符号含义如下表:

wKiom1ceMzzyR_UMAAB_iNuJZR0227.png

三、书写定时任务的方法:

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 调试脚本