图文详解crond定时任务

1crontd的介绍

  1.1crond的含义

crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

1.2关于任务调度的分类

Linux下的任务调度分为两类,系统任务调度和用户任务调度。

1.系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

/etc/crontab文件包括下面几行:

[[email protected] ~]# cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=""HOME=/

# run-parts

51 * * * * root run-parts /etc/cron.hourly

24 7 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。第六至九行表示的含义将在下个小节详细讲述。这里不在多说。

2.用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

1.3使用者权限文件:

文件:/etc/cron.deny

说明:该文件中所列普通用户不允许使用crontab命令

文件:/etc/cron.allow

说明:该文件中所列用户允许使用crontab命令

文件:/var/spool/cron/

说明:所有用户crontab文件存放的目录,以用户名命名

1.4 crontab文件的含义:

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute   hour   day   month   week   command

其中:

minute: 表示分钟,可以是从0到59之间的任何整数。

hour:表示小时,可以是从0到23之间的任何整数。

day:表示日期,可以是从1到31之间的任何整数。

month:表示月份,可以是从1到12之间的任何整数。

week:表示星期几,可以是从0到7之间的任何整数这里的0或7代表星期日。command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

用表格说明:如下

2 关于crond服务

2.1安装crontab

yum install crontabs

服务操作说明:

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置

查看crontab服务状态:service crond status

手动启动crontab服务:service crond start

查看crontab服务是否已设置为开机启动,执行命令:ntsysv

加入开机自动启动:chkconfig –level 35 crond on

2.2 crontab命令详解

1.命令格式:

crontab [-u user] file

crontab [-u user] [ -e | -l | -r ]

2.命令功能:

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。

3.命令参数:

-u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。

file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。

-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

-i:在删除用户的crontab文件时给确认提示。

例:为了防止计划任务被删除,写一个shell每天备份一次

mkdir -p /home/enrnd/crontab_bak 创建目录

touch  crontab_bak.sh  创建文件

打开 crontab_bak.sh,添加内容

crontab –l > /home/enrnd/crontab_bak/crontab`date ‘+%Y%m%d’`.txt

创建计划任务

crontab -e ,添加如下内容

0 9 * * * /home/enrnd/crontab_bak/crontab_bak.sh

2.3定时任务的种类:

1.crontab:这个命令可以周期性的执行任务工作,例如:每五分钟做一次服务器时间同步。要执行crontab这个命令,也需要启动一个服务crond才可以,这个crontab命令是在生产工作中最常用到的命令

2.anacron:这个命令主要用于非7*24小时开机的服务器准备的,anacron并不能指定具体时间执行任务工作,而是以天为周期或者在系统每次开机后执行的任务工作,它会检测服务器停机期间应该执行,但并没有进行的任务工作,并将该命令执行一遍

3.at:适合仅执行一次就结束的调度任务命令,例如:某天晚上需要处理一个任务,仅仅是这一天的晚上,属于突发性的工作任务,要执行at命令,还需要启动一个名为atd的服务才行,工作中很少使用

注:1.我们说的crond服务是运行的程序,而crontab命令用户用来设置定时规则的命令

2.crond服务是企业生产工作中常用的重要服务

3.几乎每个服务器都会用到crond服务

4.系统自动轮询任务的设置配置路径:

ls -l /etc/|grep cron

cd /etc/logrotate.d  把用户创建的定时任务放在此目录下

例:每5分钟让risesmbserver和域服务器的时候做同步

*/5 * * * * /usr/sbin/ntpdate 192.168.0.37 > /dev/null 2>&1

有些运维会把定时任务放在 /etc/crontab目录下,不支持放在此目录下

crontab 编辑的定时任务依赖的服务

chkconfig --list crond 查看是否开机启动

/etc/init.d/crond status   查看服务有没有运行

ps -ef |grep crond|grep -v grep

2.4.举例说明参数的使用说明

例:如何在指定的用户下执行crontab命令

useradd rise  #新建rise用户

cd -

crontab -u rise -e #可以编辑文件

2.5.crontab语法格式中特殊符号含义如下并举例说明:

特殊符号:

*:星号,表示任意时间都,实际就是每的意思,例如00 23 * * * cmd表示每月每周每日的23:00都执行cmd任务。如果位上是*就是该位上时间的取值范围,如小时上的*等同于00-23,分上的*等同于00-59

注:定时任务规则如果到小时,口述时就最多提每天

-:减号,表示分隔符,表示一个时间范围,区间段,

如每天的17,18,19点的00分执行任务,00 17-19 * * * cmd

,:逗号,表示分隔时段的意思。

例:每天17,18,19点的半点执行一个rise.sh的脚本命令

30 17,18,19 * * * /bin/sh/scripts/rise.sh

/n:n代表数字,即每隔n单位时间

例:每10分钟执行一次任务

*/10 * * * * cmd

例:每6小时的半刻运行这个命令

30 */6 * * * cmd

30 00-23/6 * * * cmd

2.5 关于crontab的一些实例

例1:每天早点8点到18点,每二小时的半刻运行这个命令

30 8-18/2 * * * cmd

例2:每月的1,10,22号的4点45分重启smb服务器

45 4 1,10,22 * * /etc/init.d/smb restart

例3:晚上23点和早上0点到7点,每隔一小时重新启动smb

00 23,00-07/1 * * * /etc/init.d/smb restart

例4:4月的周一到周三11点重启服务

00 11 * 4 1-3 /etc/init.d/smb restart

例5:制定一个计划任务输出时间,让他每15分钟运行一次

00,15,30,45,08-18 * * * date

例6:每小时的第3和第15分钟执行

3,15 * * * * command

例7:在上午8点到11点的第3和第15分钟执行

3,15 8-11 * * * command

例8:每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2 * * command

例9:每个星期一的上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 command

例10:每晚的21:30重启smb

30 21 * * * /etc/init.d/smb restart

例11:每月1、10、22日的4 : 45重启smb

45 4 1,10,22 * * /etc/init.d/smb restart

例12:每周六、周日的1 : 10重启smb

10 1 * * 6,0 /etc/init.d/smb restart

例13:每天18 : 00至23 : 00之间每隔30分钟重启smb

00,30 18-23 * * * /etc/init.d/smb restart

例14:每星期六的晚上11 : 00 pm重启smb

00 23 * * 6 /etc/init.d/smb restart

例15:每一小时重启smb

00 */1 * * * /etc/init.d/smb restart

例16:晚上11点到早上7点之间,每隔一小时重启smb

00 23-7/1 * * * /etc/init.d/smb restart

例17:每月的4号与每周一到周三的11点重启smb

00 11 4 * mon-wed /etc/init.d/smb restart

例18:一月一号的4点重启smb

00 4 1 * * /etc/init.d/smb restart

例19:每小时执行/etc/cron.hourly目录内的脚本

01   *   *   *   *     root run-parts /etc/cron.hourly

说明:

run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了

3章:企业生产环境中的crontab的使用原则

3.1 生产环境下定时任务的专业写法说明

1:为定时任务规则加必要的注释,写任务时任务规则尽可能的加上注释(最好是英文注释),这是个习惯和规范。最好是什么时间什么人,因为什么事写的定时任务,这样是为了让其他的运维人员可以很容易理解任务的信息,从而提高了工作效率

2:执行定时任务时,如果是执行脚本,请尽量在脚本的签名加上/bin/sh命令,否则有可能忘了为脚本设定执行权限,导致任务无法运行

3:首先在命令行操作成功,然后复制命令到脚本里,在各个细小环节减少出错的机会

4:然后测试脚本,测试成功后,复制脚本的规范路径到定时任务配置里,不要手敲

5:先在测试环境下测试,然后正式环境规范部署

3.2书写定时任务的写法说明

总结:1.为定时任务规则加必要的注释

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

3.执行shell脚本任务前加/bin/sh

4.定时任务命令或脚本结尾加>/dev/null 2&1

5.在指定用户下执行相关的定时任务

6.生成任务程序不要随意打印输出信息

tar打包的时候尽量减少使用v,这样就会减少垃圾

7.定时任务执行的脚本要规范路径(绝对路径)

8.配置定时任务规范操作过程

注:1.定时任务能不用root就不要在root下操作

2.>/dev/null 2&1问题

sendmail

/var/spool/clientmqyeue  -----邮件的临时队列目录,会产生N个小文件,导致的后果就是把磁盘的inode满

postfix

/var/spool/postfix/maildrop/ 小文件太多造成inode索引使用完解决办法

df -i 可以查看inode使用是否满

3.3工作中调试定时任务的方法:

1.增加执行任务频率调试任务(某些任务不能用于生产环境没有测试机会)

代码发布:个人开发环境---办公测试环境----IDC机房测试环境----IDC正式环境(分组,灰度发布)

2.调整系统时间调试任务(不能直接用于生产环境),保持提前5分钟

3.通过脚本日志输出调试定时任务

4.注意一些任务命令带来的问题

5.注意环境变量导致的定时任务故障(java)

6.通过crond定时任务日志调试定时任务(/var/log/cron)

7.其他的问题调试的办法

3.4 crontab定时任务生产应用问题的8箴言

1.系统环境变量问题

crontab执行shell时只能识别位数不多的系统环境变量,一般用户定义的普通变量无法识别,如果在编写的脚本需要使用这些变量,最好使用export重新申明下该变量脚本才能正常执行。例如:生产情况和Java相关的脚本任务和脚本

2.定时任务要用绝对路径

执行shell,如果使用相对路径,可能出现找不到任务路径的情况

3.脚本权限问题加/bin/sh

4.事件变量问题用反斜线\%转义,最好用脚本

5.>/dev/null 2>&1问题

6.定时任务规则之前加注释

7.使用脚本程序替代命令行定时任务

8.避免不必要的程序及命令输出

9.切换到目标目录的上一级打包目标

10.定时任务脚本中的程序命令尽量要用全路径(和环境变量的识别有关)

3.5关于crontab企业环境下作业题的分析

作业1:每分钟打印一次自己的名字拼音全拼到/server/log自己的名字命名的文件

mkdir -p /server/log/

touch /server/log/lizheng

#print log at 20170401 by lizheng for...

* * * * * echo lizheng >> /server/log/lizheng

作业总结:1.定时任务不要加注释

2.结尾不要有>/dev/null 2>&1(定向到空)

3./server/log目录必须要存在才能出结果

4.定时任务中的路径一定要绝对路径

5.crond服务必须开启才能运行

企业面试题:

1.在每周6的凌晨3:15执行/home/shell/collect.pl,并将标准输出和错误输出到/dev/null设备,请写出crontab中的语句

思路:1.命令行先运行此命令

2.把命令写入脚本内

3.测试脚本的运行

4.创建定时任务把脚本复制到crontab里

vim /server/scripts/execute.sh

#写入命令行

perl /home/shell/collect.pl

/usr/bin/perl /serer/scripts/exectue.sh

crontab -e

15 03 * * 6 /usr/bin/perl /serer/scripts/exectue.sh > /dev/null 2>&1

2.crontab在11月份内,每天的早上6点到12点钟,每隔2小时执行一次/usr/bin/httpd.sh怎么实现

思路:1.命令行先运行此命令

2.把命令写入脚本内

3.测试脚本的运行

4.创建定时任务把脚本复制到crontab里

写入命令行

Vim /usr/bin/httpd.sh

bin/sh /usr/bin/httpd.sh

crontab -e

00 06-12/2 * 11 * /bin/sh /usr/bin/httpd.sh > /dev/null 2>&1

附录:crontab书写和排错流程的图文详解

时间: 2024-11-04 20:53:33

图文详解crond定时任务的相关文章

spring中quatz的多定时任务配置图文详解

近来公司让用quatz框架做定时功能,而且还是执行多定时任务,真是苦恼. 虽然从网上搜了很多资料,但是写法上不太尽如人意,最后还是请教了螃蟹大神,给的配置建议就是简单啊,现在拿来分享下: 这里我们需要的有两部分,一个是java中的处理类,一个是quatz的配置文件,截图如下applicationContext_quartz.xmlquatz的配置文件地址地址:http://www.itxxz.com/a/kuangjia/kuangjiashili/2014/0602/10.html java中

Monitorix监控Linux主机图文详解

Monitorix监控Linux主机图文详解 Monitorix简介 Monitorix 是一款自由开源的轻巧型系统监视工具.使用 Monitorix你可以随时掌控 CPU 负载及温度.内存占用.活动进程.磁盘使用及温度.网络设备流量.网络服务等全方位的系统信息.Monitorix 需要 Apache Web 服务器来显示这些系统信息图表.所以它特别适合在 Linux 服务器上面使用. 下面是我安装的步骤 1.安装的环境和需要的rpm包 我是在CentOS 6.4下面安装的CentOS 5可以使

使用VS2015创建和使用动态链接库-图文详解

之前看过原创一篇<VS2010 动态库开发--第一章 演练:创建和使用动态链接库 (C++)>的帖子,地址是http://blog.sina.com.cn/s/blog_6fb3686501011ymn.html,感谢原创.这里我们使用VS2015创建和使用自己的动态链接库,配以图文详解. 我们先来演示如何使用VS2015创建一个动态链接库.1.新建一个"Win32控制台应用程序","名称"为MathFuncsDll,"解决方案名称"

图文详解如何搭建Windows的Android C++开发环境

原地址:http://www.apkbus.com/android-18595-1-1.html //=====================================================================//TITLE://    图文详解如何搭建Windows的Android C++开发环境(一)//AUTHOR://    norains//DATE://    Thursday  14-April-2011//Environment://    Cygw

图文详解远程部署ASP.NET MVC 5项目

原文:图文详解远程部署ASP.NET MVC 5项目 话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专门研究了一下具体的过程,下面和大家分享一下.本人新手,还望大虾勿喷,有什么问题,还望高手指点. 一.本文实验环境: Windows Server 2012 R2 SQL Server 2012 Express Visual Studio 2013 项目为:ASP.NET MVC 5.0,使用的是L

LNMP编译安装之msyql安装--图文详解

LNMP编译安装之msyql安装--图文详解 1.前言 本次安装采用源码安装,主要资源包从官网下载,次要依赖则使用yum进行安装,本篇只涉及mysql的安装,msyql远程登录,不涉及mysql具体配置.该教程纯属安装,不涉及任何重要知识点,老少皆宜. 2.安装步骤 2.1.下载boost(只下载不安装) wget http://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz 2.2.解压bosot t

LNMP编译安装之nginx安装--图文详解

LNMP编译安装之nginx安装--图文详解 1.前言 本次安装采用源码安装,主要资源包从官网下载,次要依赖则使用yum进行安装,本篇只涉及nginx的安装,不涉及nginx的配置,对应nginx如何访问php,本篇也不涉及.该教程纯属安装,不涉及任何重要知识点,老少皆宜. 2.安装步骤 nginx官网:http://nginx.org/en/download.html 2.1.下载nginx wget http://nginx.org/download/nginx-1.12.0.tar.gz

CentOS 7上安装Zabbix Server 3.0 图文详解

转载自 http://www.linuxidc.com/Linux/2016-09/135204.htm CentOS 7上安装Zabbix Server 3.0 图文详解 1.查看系统信息. cat /etc/RedHat-releaseCentOS Linux release 7.0.1406 (Core) uname -a Linux VM_96_155_centos3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_

Android中Canvas绘图之Shader使用图文详解

概述 我们在用Android中的Canvas绘制各种图形时,可以通过Paint.setShader(shader)方法为画笔Paint设置shader,这样就可以绘制出多彩的图形.那么Shader是什么呢?做过GPU绘图的同学应该都知道这个词汇,Shader就是着色器的意思.我们可以这样理解,Canvas中的各种drawXXX方法定义了图形的形状,画笔中的Shader则定义了图形的着色.外观,二者结合到一起就决定了最终Canvas绘制的被色彩填充的图形的样子. 类android.graphics