Linux命令总结--contab命令

       linux系统中的定时任务与两部分组成,一部分是系统中自动的定时任务,叫做系统任务调度,另一种则是用户自己写的定时任务,叫做用户任务调度,交给系统去执行。系统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成用户自定义的一些任务

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

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

[root@localhost ~]# 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

[root@localhost ~]#

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

        用户定时任务(用户任务调度)用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。它也分两种,一种为一次性定时任务(at命令),另一个是周期性定时任务(crontab命令)。

关系图如下:

  

今天我们主要讲的是周期性的定时任务。

一.crond 介绍

crond 是linux系统中的用来执行周期性任务的守护进程,安装时会默认安装此进程,crond进程会每分钟定期检查是否有需要执行的任务,如果有,就自动执行该任务。

语法

crontab [ -u user ] file

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

-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

参数说明

  • -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
  • -r : 删除目前的时程表
  • -l : 列出目前的时程表
  • -u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。

时间格式如下:

f1 f2 f3 f4 f5 program
  • 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
  • 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
  • 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
  • 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
  • 当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推
*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 7) (星期天 0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定执行时间。

在以上各个字段中,还可以使用以下特殊字符:

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

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

二,实例

(00 23 * * *--每晚23时执行)

(00 17-19 * * * --每晚17-19时执行)

(*/5 * * * *--每隔五分钟执行一次)

(30 3,12 * * *--每天凌晨三点半和中午12点半执行一次)

(30 8-18/2 * * * --早上八点半到下午六点半每隔两个小时执行一次)

(45 4 1,10,22 * *--每月的1日10日22日的凌晨4点45分执行)

(10 1 * * 6,0—每周六周日的凌晨1点十分执行)

(* 23,00-07/1 * * *--每天23点,凌晨12点到早晨7点每小时每一分钟执行一次)

(5月5号上午九点执行:00 09 05 05 *)

(每周日,上午9:30执行:30 09 * * 0)

注意:周和日不要同时用,否则可能达不到想要的效果

三.  crontab定时任务生产应用问题7箴言

1、   系统环境变量问题

 Crontab执行shell只能识别为数不多的系统环境变量,一般用户定义的普通变量是无法识别的,如果在编写脚本中需要使用这些变量,最好使用export重新声明下该脚本才能正常执行。

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

Crontab执行shell时,如果shell路径是相对路径或者shell里含有的绝对路径,此时 就会找不到文件。

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

要保证crontab的执行者有访问shell脚本所在的目录并且执行此shell脚本的权限,最佳的方法就是执行脚本前加/bin/sh,否则有可能因为忘了为脚本设定执行权限,而无法完成任务。

4、 时间变量问题用反斜线

“%”号在crontab任务配置中被认为是newline。需要用“”来转义。Crontab任务命令中,如果有“date+%Y%m%d”,必须替换为  “date+\%Y\%m\%d”

5、 >/dev/null2>&1问题

当定时任务在你所指定的时间执行,系统会寄信给你,显示该程序执行的内容,若系统未开启邮件服务就会导致邮件临时目录/var/spool/clientqueue碎文件件逐渐增加,wei此命令为了防止占满inode.   

6、  定时任务定时规范之前加注释

写定时任务加注释,什么人物,什么时间,因为什么事,干了什么,都要记得清清楚楚。

7、  避免不必要的程序及命令的输出

在开发定时任务程序和脚本时,在调试好脚本程序后,应尽量把DEBUG及命令输出的内容信息屏蔽掉,如果需要,可指向到定时日志文件里,以避免多余的系统垃圾。    

原文地址:https://www.cnblogs.com/hanjiali/p/13930227.html