生产环境下的cron写法

简介:

cron这个单词来源于希腊单词chronos(意为“时间”),是Linux系统下一个自动执行指定任务的程序。例如,你想在每晚睡觉期间创建某些文件或文件夹的备份,就可以用cron自动执行。很多朋友有时经常在问:为什么我写的cron计划列表不能执行了?其实最常见的一个问题往往是因为环境变量不对。经常会看到论坛里有人问:为什么我的cron计划任务创建了不执行准备创建一条计划任务的时候,很多人都喜欢在命令行下运行一遍,因为这个时候环境变量是随着SHELL自动带进来,在cron中则可能因为找不到正确的环境变量,任务就不能执行。

cron服务的启动和停止

cron服务是Linux的内置服务,但它不会开机自动启动。可以用以下命令启动和开机自动启动:

1
2
service crond start
chkconfig crond on

cron的命令语法:

cron把命令行保存在/etc/crontab文件里,每个系统用户都可以有自己的crontab(/var/spool/cron/)。要查看当前用户的crontab,输入crontab -l;要编辑crontab,输入 crontab -e;要删除crontab,输入 crontab -r。如当前是root身份,要查看/编辑/删除/某用户的crontab,只需在相应的命令后加上 -u USERNAME( crontab -e -u USERNAME)即可。cron服务每分钟不仅要读一次/var/spool/cron目录内的所有文件,还需要读一次/etc/crontab 文件。配置这个文件也能让cron执行任务。使用crontab命令是对用户级任务的配置,而编辑/etc/crontab文件是对系统级任务的配置。我们一般在工作中是编辑/etc/crontab文件,然后在里面添加计划任务,其字段有7处,如下所示:

字段说明

分钟(0-59)

小时(2-24)

日期(1-31)

月份(1-12;或英文缩写JanFeb)

周几(0-60为周日;或单词缩写SunMon)

用户名(执行命令时以此用户的身份)

要执行的命令(路径)


下面以实际案例来举例说明cron的用法:

1
12 3 * * * root  tar  czf /usr/local/backups/daily/etc . tar .gz  /etc  >>  /dev/null  2>&1

这条语句将在每天的凌晨312(03:12)运行 tar czf /usr/local/backups/daily/etc.tar.gz /etc 命令,>>/dev/null 2>&1 表示把所有标准输出发送到 /dev/null(linux的回收站),把标准错误输出(2)发送到和标准输出(1)同样的地方( /dev/null),运行这行命令将不会产生任何输出。

这条语句可以变得稍微复杂一点:

1
30 15 13 6 1 * root  tar  czf  /usr/local/backups/daily/etc . tar .gz /etc  >>  /dev/null  2>&1

它将在613日周一的15:30运行 tar czf /usr/local/backups/daily/etc.tar.gz  /etc 命令。

以下语句可以达到同样的效果:

1
30 15 13 Jun Mon * root  tar  czf /usr/local/backups/daily/etc . tar .gz  /etc  >>   /dev/null  2>&1

如果你想以用户joey的身份每小时的第15分钟运行某个程序,可以使用:

1
15 * * * * joey  /usr/bin/somecommand >>  /dev/null  2>&1

其中的星号(*)是通配符,表示cron将忽略这个字段。

如果你想每两小时就运行某个程序,可以在小时字段里使用 */2。它将会在2点、4点、

6…24点运行。具体语句如下:

1
0 * /2  * * * joey  /usr/bin/somecommand >>  /dev/null  2>&1

cron语句中还可以使用逗号(,)来指定多个时间。例如你想在每小时的15分和30分运行

某个程序,可以在分钟字段使用 15,30

1
15,30 * * * * joey  /usr/bin/somecommand >>  /dev/null  2>&1

如果你想在每月的第一周(1号到7)每天的指定时间运行某个程序,可以在日期字

段使用 1-7

1
15,30 * /2  1-7 * * joey  /usr/bin/somecommand >>  /dev/null  2>&1

这条语句将在每月的第1-7日每两小时的15分和30(02:1502:30…22:30)运行 /usr/bin/somecommand 命令。

如果你想在每天的16:18执行一个脚本集合,可以把所有要执行的脚本放到一个目录中(/home/username/cron),可以使用:

1
18 16 * * * root run-parts  /home/username/cron >>  /dev/null  2>&1

注:系统维护中必须使用的一个技巧

每条计划任务执行完毕之后,系统会自动将输出发送邮件给当前系统用户。邮件日积月累,非常的多,甚至会撑爆整个系统。所以每条计划任务命令后面进行重定向处理是非常必要的 >>/dev/null 2>&1 ,其前提是对计划中的命令需要正常输出已经作了一定的处理比如追加到某个特定日志文件。另外,如果你想保存某个程序的输出结果,可以把>>/dev/null 2>&1替换为>>某文件2>&1即可。










本文转自 抚琴煮酒 51CTO博客,原文链接:http://blog.51cto.com/yuhongchun/502758,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
存储 运维 监控
运维.Linux下执行定时任务(上:Cron简介与用法解析)
运维.Linux下执行定时任务(上:Cron简介与用法解析)
60 0
|
6月前
|
运维 算法 jenkins
做一个可通过jenkins定时任务Cron表达式设置的python定时函数
用python代码,来解析jenkins定时任务表达式,并获取最近的执行任务时间戳
|
NoSQL Java 调度
定时任务基本使用指南(cron 时间表达式、Spring 自带调度器、JDK 原生定时器)
定时任务基本使用指南(cron 时间表达式、Spring 自带调度器、JDK 原生定时器)
660 0
|
运维 调度 开发者
深入解析 Cron 表达式:定时任务的时间艺术
大家好,今天我们将一起来深入了解 Cron 表达式,这是计划任务中不可或缺的时间表达式。无论你是一名开发者、运维工程师还是对定时任务感兴趣的读者,本文都将帮助你理解 Cron 表达式的基本结构、常用格式以及如何编写自定义的定时任务。也为大家提供了一个在线cron表达式生成的工具,让我们开始探索这项定时任务的时间艺术吧!
1134 0
深入解析 Cron 表达式:定时任务的时间艺术
|
缓存 监控 Unix
Cron Job 表达式解析
一遍又一遍地执行相同的任务可能会很麻烦。 Cron Job 让用户可以自动执行任务。 这节省了宝贵的时间,让用户可以专注于其他重要任务。
265 1
|
微服务
Apollo实现cron语句的热配置
Apollo实现cron语句的热配置
189 2
|
开发工具
crontab 基础用法
crontab 基础用法
|
jenkins 持续交付
|
数据库
Confluence 6 Cron 表达式
一个 cron 表达式是以 6-7 时间字段来定义一个计划任务是如何按照时间被执行的。每一个字段中的数据库而已为数字或者是一些特定的字符串来进行表达。
1124 0