Linux 定时任务crontab_014

摘要:
1.crontab命令的概念。crontab命令用于设置定期执行的指令。该命令从标准输入设备读取指令,并将其存储在“crontab”文件中,以供以后读取和执行。cron系统调度进程。crontab命令允许用户提交、编辑或删除相应的作业。

原文

1、  crontab命令概念

 crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。

  

cron 系统调度进程。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。

crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。系统管理员可以通过/etc/cron.deny 和 /etc/cron.allow 这两个文件来禁止或允许

用户拥有自己的crontab文件。

  

2、检查是否安装了crontab,如果提示未安装请自行安装,crontab安装包在系统光盘里面的pacekage文件夹crontabs安装包。

Linux 定时任务crontab_014第1张

3、  crontab服务启动与关闭。

Linux 定时任务crontab_014第2张

4、  全局配置文件:

crontab在/etc目录下面存在cron.hourly,cron.daily,cron.weekly,cron.monthly,cron.d五个目录和crontab,cron.deny二个文件。

Linux 定时任务crontab_014第3张

cron.daily是每天执行一次的job

cron.weekly是每个星期执行一次的job

cron.monthly是每月执行一次的job

cron.hourly是每个小时执行一次的job

cron.d是系统自动定期需要做的任务

crontab是设定定时任务执行文件

cron.deny文件就是用于控制不让哪些用户使用Crontab的功能

5、  用户配置文件:

每个用户都有自己的cron配置文件,通过crontab -e 就可以编辑,一般情况下我们编辑好用户的cron配置文件保存退出后,系统会自动就存放于/var/spool/cron/目录中,文件以用户名命名.linux的cron服务是每隔一分钟去读取一次/var/spool/cron,/etc/crontab,/etc/cron.d下面所有的内容.

Linux 定时任务crontab_014第4张

6、  crontab文件格式:

  *           *        *        *        *           command

minute   hour    day   month   week      command

分          时         天      月        星期       命令

Linux 定时任务crontab_014第5张

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

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

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

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

week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

7、 特殊字符:

星号(*):代表每的意思,例如month字段如果是星号,则表示每月都执行该命令操作。

逗号(,):表示分隔时段的意思,例如,“1,3,5,7,9”。

中杠(-):表示一个时间范围,例如“2-6”表示“2,3,4,5,6”。

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

8、在home目录下编写一个test.sh脚本,脚本功能是把/home下ifcfg-eth0这个文本复制到/mnt目录下。

Linux 定时任务crontab_014第6张

9、运行crontab –e 编写一条定时任务 */5 * * * * /home/test.sh 在每5分钟执行一次test.sh脚本。

Linux 定时任务crontab_014第7张

Linux 定时任务crontab_014第8张

10、查询当前用户定时任务或删除当前用户定时任务。

Linux 定时任务crontab_014第9张

11、设置crond开机自动启动

Linux 定时任务crontab_014第10张

12、实例:

Linux 定时任务crontab_014第11张

 ##每月每天凌晨3点30分和中午12点20分执行test.sh脚本

30 3,12 * * *  /home/test.sh           

##每月每天每隔6小时的每30分钟执行test.sh脚本

30 */6 * * *  /home/test.sh

##每月每天早上8点到下午18点每隔2小时的每30分钟执行test.sh脚本

30 8-18/2 * * * /etc/init.d/network restart

##每月每天晚上21点30分执行test.sh脚本

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

##每月1号、10号、22号凌晨4点45分执行test.sh脚本

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

##8月份周一、周日凌晨1点10分执行test.sh脚本

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

##每月每天每小时整点执行test.sh脚本

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

 

******定时任务书写要领******

要领1:定时任务要加注释

要领2:定时任务命令或脚本结尾加 &>/dev/null 或 >/dev/null 2>&1 或 1>/dev/null 2>/dev/null

要领3:定时任务执行shell脚本前加/bin/sh,定时任务执行shell脚本不必添加执行权限

要领4:定时任务命令或程序尽量写到脚本里,定时任务只要执行脚本即可

         注意操作步骤:

  (1)、命令行执行

  (2)、编写脚本

  (3)、测试脚本

  (4)、设置定时任务

要领5:生产任务程序不要随意打印输出信息

要领6:定时任务执行的脚本要规范路径 (例如 /server/script)

要领7:配置定时任务要规范操作过程

要领8:定时任务执行特殊的字符需要进行转义,否则会报错,例如 百分号% 转义 \%

要领9:定时任务脚本中如果涉及使用到环境变量,必须在脚本中重新定义,不然,定时任务识别不了

https://blog.51cto.com/oldboy/1410555

1.定时任务crond介绍

1.1 crond是什么

crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。

特殊需求:(秒级别)crond服务就无法搞定了,一般工作中写脚本守护进程执行。

1.2 为什么要使用crond定时任务

linux系统的定时任务crond,相当于我们平时生活中的闹钟的功能。可以满足周期性执行任务的需求。

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

1.3.1 windows 7 系统的定时任务

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

1.3.2 linux系统的定时任务

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

① linux系统自身定期执行的任务工作:系统周期性执行的任务工作,如轮询系统日志,备份系统数据,清理系统缓存等。

centos5.X例:

[root@CentOS5 log]# ll messages*

-rw------- 1 root root 372258 Mar 14 20:48 messages

-rw------- 1 root root 349535 Nov 11 18:13 messages.1

提示:centos 6.4日志轮询结尾是按时间了。

centos6.X例:

[root@CentOS6 log]# ll messages*

-rw------- 1 root root  1591 3月  25 21:57 messages

-rw------- 1 root root 78304 3月   3 20:40 messages-20140303

-rw------- 1 root root 78050 3月   8 19:42 messages-20140311

-rw------- 1 root root   745 3月  18 00:46 messages-20140318

-rw------- 1 root root 77232 3月  22 21:20 messages-20140325

② 用户执行的任务工作:某个用户或系统管理员定期要做的任务工作,例如每隔5分钟和互联网上时间服务器进行时间同步,每天晚上0点备份站点数据及数据库数据,一般这些工作需要由每个用户自行设置才行。

例:

[root@CentOS6 log]# crontab -l

#time sync by lee at 2014-1-14

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


2.定时任务crond使用说明

[root@CentOS6 log]# crontab --help

crontab:无效选项 -- -

crontab: usage error: unrecognized option

usage:  crontab [-u user] file

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

                (default operation is replace, per 1003.2)

 -e      (edit user's crontab)

 -l      (list user's crontab)

        -r      (delete user's crontab)

        -i      (prompt before deleting user's crontab)

        -s      (selinux context)

2.1 指令说明

通过crontab我们可以在固定的间隔时间执行指定的系统指令或script脚本。时间间隔的单位是分钟,小时,日,月,周及以上的任意组合(注意:日和周不要组合)

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

文件

说明

/etc/cron.deny

该文件中所列用户不允许使用crontab命令。

/etc/cron.allow

该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny

/var/spool/cron

所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名。

2.3 指令选项说明表

参数

含义

指定示例

-l(字母)

查看crontab文件内容

crontab -l

-e

编辑crontab文件内容

crontab -e

-i 

删除crontab文件内容,删除前会提示确认

crontab -ri

-r

删除crontab文件内容

crontab -r

-u user

指定使用的用户执行任务

crontab -u lee -l

提示:crontab{-l |-e}实际上就是在操作/var/spool/cron/当前用户这样的文件。

注:

crontab -e

/var/spool/cron/root

前者会检查语法,而后者不会。

visudo

/etc/sudoers

前者会检查语法,而后者不会。

2.4指令的使用格式

默认情况下,当用户建立定时任务规则后,该规则记录对应的配置文件会存在于/var/spool/cron中,其crontab配置文件对应的文件名与登录的用户名一致。如:root用户的定时任务配置文件为/var/spool/cron/root。

crontab用户的定时任务一般分为6段(空格分隔,系统的定时任务则/etc/crontab分为7段),其中前五段位时间设定段,第六段为所要执行的命令或脚本任务段。

2.4.1 crontab基本格式

* * * * * cmd

提示:

① cmd为要执行的命令或脚本,例如/bin/sh  /server/scripts/lee.sh.

② 每个段之间必须要有空格。

2.4.2 crontab语法格式中时间段的含义表

含义

取值范围

第一段

代表分钟

00-59

第二段

代表小时

00-23

第三段

代表日期

01-31

第四段

代表月份

01-12

第五段

代表星期

0-7(0和7都代表星期日)

2.4.3 crontab语法格式中特殊符号的含义表

特殊符号

含义

*

*号表示任意时间都,就是“每”的意思,举例:如00 01 * * * cmd表示每月每周每日的凌晨1点执行cmd任务。

-

减号,表示分隔符,表示一个时间范围段,如17-19点,每小时的00分执行任务。00 17-19 * * * cmd。就是17,18,19点整点分别执行的意思。

逗号,表示分隔时间段的意思。30 17,18,19 * * * cmd 表示每天17,18,19点的半点执行cmd。也可以和“-”结合使用,如: 30 3-5,17-19 * * * cmd。

/n   

n代表数字,即”每隔n单位时间”,例如:每10分钟执行一次任务可以写 */10 * * * * cmd,其中 */10,*的范围是0-59,也可以写成0-59/10。


3.书写crond定时任务7个基本要领

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

加了注释,就知道定时任务运行的是什么作业,以防以后作业混乱。这是个好习惯和规范。

[root@angelT ~]# crontab -l

#time sync by lee at 2014-1-14

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

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

[root@angelT ~]# crontab -l

#backup www to /backup

00 00 * * * /bin/sh /server/scripts/www_bak.sh >/dev/null  2>&1

3.3定时任务执行的脚本要规范路径,如:/server/scripts

[root@angelT ~]# crontab -l

#backup www to /backup

00 00 * * * /bin/sh /server/scripts/www_bak.sh >/dev/null  2>&1

3.4执行shell脚本任务时前加/bin/sh

执行定时任务时,如果是执行脚本,尽量在脚本前面带上/bin/sh命名,否则有可能因为忘了为脚本设定执行权限,从而无法完成任务。

[root@angelT ~]# crontab -l

#backup www to /backup

00 00 * * * /bin/sh /server/scripts/www_bak.sh >/dev/null  2>&1

3.5 定时任务结尾加 >/dev/null 2>&1

[root@angelT ~]# crontab -l

#backup www to /backup

00 00 * * * /bin/sh /server/scripts/www_bak.sh >/dev/null  2>&1

3.5.1 有关/dev/null的说明

/dev/null为特殊的字符设备文件,表示黑洞设备或空设备。

[root@angelT ~]# ll /dev/null 

crw-rw-rw- 1 root root 1, 3 3月  26 01:10 /dev/null

3.5.2 有关重定向的说明

>或1>   输出重定向:把前面输出的东西输入到后边的文件中,会删除文件原有内容。

>>或1>>追加重定向:把前面输出的东西追加到后边的文件中,不会删除文件原有内容。

<或<0   输入重定向:输入重定向用于改变命令的输入,指定输入内容,后跟文件名。

<<或<<0输入重定向:后跟字符串,用来表示“输入结束”,也可用ctrl+d来结束输入。

2>       错误重定向:把错误信息输入到后边的文件中,会删除文件原有内容。

2>>     错误追加重定向:把错误信息追加到后边的文件中,不会删除文件原有内容。

标准输入(stdin):代码为0,使用<或<<。

标准输出(stdout):代码为1,使用>或>>。正常的输出。

标准错误输出(sederr):代码为2,使用2>或2>>。

特殊:

2>&1就是把标准错误重定向到标准输出(>&)。

>/dev/null 2>&1 等价于 1>/dev/null  2>/dev/null

3.5.3 >/dev/null 2>&1的作用

如果定时任务规范结尾不加 >/dev/null 2>&1,很容易导致硬盘inode空间被占满,从而系统服务不正常(var/spool/clientmqueue邮件临时队列目录,垃圾文件存放于此,如果是centos 6.4系统,默认不装sendmail服务,所以不会有这个目录。)

3.6 在指定用户下执行相关定时任务

这里要特别注意不同用户的环境变量问题,如果是调用了系统环境变量/etc/profile,最好在程序脚本中将用到的环境变量重新export下。

3.7生产任务程序不要随意打印输出信息

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

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

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

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

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


4.生产场景如何调试crond定时任务

规范的公司开发和运维人员操作流程:个人的开发配置环境-->办公室的测试环境-->idc机房的测试环境-->idc机房的正式环境。

4.1 增加执行频率调试任务

在调试时,把任务执行频率调快一点,看能不能正常执行,如果正常,那就没问题了,再改成需要的任务的执行时间。

注意:有些任务时不允许频繁执行的,例如:定时往数据库里插入数据,这样的任务要在测试机上测试好,然后正式线上出问题的机会就少了。

4.2调整系统时间调试任务

用正确的执行任务的时间,设置完成后,可以修改下系统当前时间,改成任务执行时间的前几分钟来测试(或者重启定时任务服务)

4.3通过日志输出调试定时任务

在脚本中加入日志输出,然后把输出打到指定的日志中,然后观察日志内容的结果,看是否正确执行。

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

注意: * * * * * echo “==”>>/tmp/lee.log >/dev/null 2>&1 这里隐藏的无法正确执行的任务配置,原因是前面多了>>,或者去掉结尾的 >/dev/null 2>&1。

4.5 注意环境变量导致的定时任务故障

例如:在调试java程序任务的时候,注意环境变量,把环境变量的定义加到脚本里。

4.6通过定时任务日志调试定时任务

[root@angelT ~]# tail -f /var/log/cron 

Mar 26 15:55:01 angelT CROND[3415]: (ida) CMD (/usr/sbin/ntpdate time.windows.com >/dev/null 2>&1)

Mar 26 15:55:01 angelT CROND[3416]: (root) CMD (/usr/sbin/ntpdate  time.windows.com >/dev/null  2>&1)

Mar 26 16:00:01 angelT CROND[3422]: (root) CMD (/usr/sbin/ntpdate  time.windows.com >/dev/null  2>&1)

Mar 26 16:00:01 angelT CROND[3423]: (root) CMD (/usr/lib64/sa/sa1 1 1)

Linux 定时任务crontab_014第12张

Linux 定时任务crontab_014第13张

Linux 定时任务crontab_014第14张

 Linux 定时任务crontab_014第15张

Linux 定时任务crontab_014第16张

Linux 定时任务crontab_014第17张

Linux 定时任务crontab_014第18张

Linux 定时任务crontab_014第19张

Linux 定时任务crontab_014第20张

Linux 定时任务crontab_014第21张

 Linux 定时任务crontab_014第22张

 Linux 定时任务crontab_014第23张

Linux 定时任务crontab_014第24张

Linux 定时任务crontab_014第25张

Linux 定时任务crontab_014第26张

Linux 定时任务crontab_014第27张

Linux 定时任务crontab_014第28张

Linux 定时任务crontab_014第29张

Linux 定时任务crontab_014第30张

Linux 定时任务crontab_014第31张

Linux 定时任务crontab_014第32张

Linux 定时任务crontab_014第33张

Linux 定时任务crontab_014第34张

Linux 定时任务crontab_014第35张

 Linux 定时任务crontab_014第36张

Linux 定时任务crontab_014第37张

Linux 定时任务crontab_014第38张

 Linux 定时任务crontab_014第39张

https://blog.51cto.com/oldboy/1541515 

linux定时任务crond export变量问题群友案例

来自网友兄弟 北京@Grady(254553457) 的总结。

1)我写了一个重启resin的脚本,由于业务原因,需要定时在某一个时间重启下resin服务器,于是就在
crontab里配置了如下内容:
50 17 * * 1-5 root /usr/local/bin/resin_restart.sh
其中,resin_restart.sh内容如下:
#!/bin/sh
/usr/local/bin/xxresin_stop.sh
/usr/local/bin/xxresin_start.sh

2)有问题的时刻到来了,服务器虽然定时起来了,但是却报了如下错误:
Resin can't load com.sun.tools.javac.Main.  Usually this means that the JDK tools.jar is missing from the classpath,
possibly because of using a JRE instead of the JDK. 
You can either add tools.jar to the classpath or change the compiler to an external one with <java compiler='javac'/> or jikes.
但是,明明已经在profile里配置了环境变量,为啥还找不到呢。折腾了需求没有搞定。

3)后来在QQ交流群114580181,找到了热心下老男孩老师,并请教,得到的回答是:
由于export变量问题导致:具体为,crontab执行shell时只能识别为数不多的系统环境变量,
普通环境变量一般是无法识别的,如果在编写的脚本中需要使用变量,最好使用export重新声明下该变量,
以确保脚本正确执行。以后作为一个开发基本规范写上。
------------------------
4)然后我在resin重启脚本里重新定义了下环境变量,脚本如下:
#!/bin/sh
#下面就是环境变量定义
JAVA_HOME="/opt/jdk1.6.0_18"
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/opt/nginx-0.7.61/sbin:/opt/jdk1.6.0_18/bin:/opt/resin-3.0.25/bin:$PATH
export JAVA_HOME PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC CLASSPATH
/usr/local/bin/xxresin_stop.sh
/usr/local/bin/xxresin_start.sh

5)经过测试,定时任务此时顺利重启,在这里非常感谢老男孩老师给与的支持。

Linux 定时任务crontab_014第40张

Linux 定时任务crontab_014第41张

Linux 定时任务crontab_014第42张

Linux 定时任务crontab_014第43张

Linux 定时任务crontab_014第44张

Linux 定时任务crontab_014第45张

Linux 定时任务crontab_014第46张

Linux 定时任务crontab_014第47张

Linux 定时任务crontab_014第48张

Linux 定时任务crontab_014第49张

 Linux 定时任务crontab_014第50张

Linux 定时任务crontab_014第51张

Linux 定时任务crontab_014第52张

Linux 定时任务crontab_014第53张

Linux 定时任务crontab_014第54张

 Linux 定时任务crontab_014第55张

免责声明:文章转载自《Linux 定时任务crontab_014》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python3.6+pycharm+robotframework 环境搭建极光推送 JPush 简介 集成 MD下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux安装zookeeper

安装zookeeper 1、解压缩 zookeeper-3.4.6.tar.gz:      tar -zxvf zookeeper-3.4.6.tar.gz 2、创建 /usr/local/zookeeper 文件夹:mkdir -p /usr/local/zookeeper 3、进入到 /usr/local/zookeeper 目录中:      cd...

linux面试题目2

9./mnt目录主要用于什么?/root目录跟root用户有什么关系?/根目录与/boot目录有什么联系? 答:/mnt主要用来挂载外部设备,/root根目录是root用户的家目录,/boot目录是/根目录的子目录 10.某一天误操作,执行了rm??-rf??* ,会有哪些情况发生?请举例。 答:文件被彻底干掉,很难恢复。严重点系统瘫痪,数据全部丢失 二、...

Debian下编译安装MPlayer

Debian下编译安装MPlayer MPlayer是Linux下一款优秀的媒体播放软件,然而在我的Debian系统下却一直没有用起来。说起其中的原因,一是因为如果使用Apt来查找安装,那么所安装上的是非GUI下的MPlayer程序,其实要论起来,这样的程序也是一样可以播放媒体文件,然而就个人的使用来看,如果只是播放一些MP3文件,那么还是相当不错的,...

Delve调试器 汇编

  目前Go语言支持GDB、LLDB和Delve几种调试器。其中GDB是最早支持的调试工具,LLDB是macOS系统推荐的标准调试工具。但是GDB和LLDB对Go语言的专有特性都缺乏很大支持,而只有Delve是专门为Go语言设计开发的调试工具。而且Delve本身也是采用Go语言开发,对Windows平台也提供了一样的支持。本节我们基于Delve简单解释如何...

【转】Linux 内核开发 Eclipse内核开发环境搭建

【转】Linux 内核开发 - Eclipse内核开发环境搭建 转自:http://blog.chinaunix.net/uid-24512513-id-3183457.html 翻译这篇文章的时候,我也想过可能会有高手说,内核开发用vi就足够了,还用什么eclipse,当然对于内核中函数特别了解的人确实如此,但是对于新 手,每使用一个函数,就要去查找一下...

Linux下实现免密码登录(超详细)

1.Linux下生成密钥   ssh-keygen的命令手册,通过”man ssh-keygen“命令:   通过命令”ssh-keygen -t rsa“   生成之后会在用户的根目录生成一个 “.ssh”的文件夹   进入“.ssh”会生成以下几个文件   authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的...