Cronjob – 快速入门

本文介绍Cronjob在UNIX、SOLARIS及LINUX系统中的应用,包括Cronjob的基本概念、Cron表的约束条件、Cron命令的使用方法、Cron表的语法结构、Cronjob的示例等,帮助读者掌握如何使用Cron实现任务调度。

Cronjob – 快速入门

Cron 是UNIX, SOLARIS,LINUX下的一个十分有用的工具。 通过Cron脚本能使计划任务定期地在系统后台自动运行。这种计划任务在UNIX, SOLARIS, LINUX下术语为cron jobs。 Crontab (CRON 表)则是用来记录在特定时间运行的CRON的一个脚本文件。

Crontab归结为以下几点特性:

1.      Crontab约束

2.       Crontab命令

3.       Crontab文件语法

4.       Crontab示例

5.       Crontab环境设置

6.      邮件

7.      日志文件

8.      其它

1.      Crontab约束

当用户名记录在文件/usr/lib/cron/cron.allow时,该用户的crontab有效。当/usr/lib/cron/cron.allow 文件不存在时,用户名没被记录在/usr/lib/cron/cron.deny文件中,该用户的crontab也有效。当只存在/usr/lib/cron/cron.deny且为空时,所有的用户都可使用crontab。当前两个文件都不存在时,只有root用户可以使用crontab。 Deny或allow记录以每行一个用户名的形式记录信息。

2.      Crontab 命令

export EDITOR=vi ;为crontab文件指定一个编辑器。 

crontab  -e  编辑该用户的crontab,当指定crontab  不存在时新建。  

crontab  -l  列出该用户的crontab。  

crontab  -r  删除该用户的crontab。  

crontab  -u<用户名称>  指定要设定crontab的用户名称。

crontab –v 显示上一次编辑的时间(只在某些操作系统上可用)

3.       Crontab 文件

Crontab语法一个crontab文件用五个段来定义:天,日期和时间,和一个要定期执行的命令代码。

*     *   *   *    *  command to be executed
-     -    -    -    -
|     |     |     |     |
|     |     |     |     +----- day of week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)
 

所有的值都必须在相应的范围之内,否则视为无效。在填值区域内可以是*也可以是以”,”分隔的一组值。值可以是一个数据也可以是用连接符连起来的两个数(表示范围)。注:日期的格式可以是星期,也可以是一个月中的天。假如两个都有值,则在这两个时间都会执行。

4. Crontab 实例 

下面是crontab文件中的一行,意思是在每天下午6:30中删除临时文件(临时文件存放在/home/someuser/tmp)。 30     18     *     *     *         rm /home/someuser/tmp/*

以下我们改变参数的值使其在不同的时间运行:如下表

min

hour

day/month

month

day/week

 Execution time

30

0

1

1,6,12

*

-- 00:30 Hrs  on 1st of Jan, June & Dec.

:

0

20

*

10

1-5

--8.00 PM every weekday (Mon-Fri) only in Oct.

:

0

0

1,10,15

*

*

-- midnight on 1st ,10th & 15th of month

:

5,10

0

10

*

1

-- At 12.05,12.10 every Monday & on 10th of every month

:

注:要是无意间键入了没带参数的crontab 命令,别Control-d退出,这样会删掉所有的cronjob。 应该Control-c退出.

 5. Crontab 环境设置

Cron其实是在shell(/usr/bin/sh).后台引用用户程序的命令。

 Cron默认的shell环境是:

HOME=user's-home-directory

LOGNAME=user's-login-id

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

SHELL=/usr/bin/sh  

用户希望自己的配置文件在表或者脚本的入口直接执行。

 6. 禁用邮件默认的cronjobs在执行任务时会给用户发一封邮件。如果您不需要的话可以通过以下命令关闭。 >/dev/null 2>&1

 7.    生成日志文件保存cronjobs日志只需作如下设置就可以

30 18  *    *   *    rm /home/someuser/tmp/* > /home/someuser/cronlogs/clean_tmp_dir.log “/home/someuser/cronlogs/clean_tmp_dir.log”为日志文件保存的绝对路径    

 

 转译英文原文来自

 Copyright © 2000-2007 , Adminschoice.com . All Rights Reserved. Site Comment/Suggestions   Privacy

附上原文地址

http://www.adminschoice.com/docs/crontab.htm

 

### Cron 表达式简介 Cron 表达式是一个字符串,用于指定任务的执行时间,由多个时间域组成,每个域之间用空格分隔。其格式和各域的可用字符及有效范围如下: | 域 | 可用字符 | 有效范围 | | --- | --- | --- | | 秒(Seconds) | `- * /` | `0 - 59` | | 分(Minutes) | `- * /` | `0 - 59` | | 时(Hours) | `- * /` | `0 - 23` | | 日(Day-of-Month) | `- * / ? L C W` | `0 - 31` | | 月(Month) | `- * /` | `1 - 12` 或 `JAN - DEC` | | 周(Day-of-Week) | `- * / ? L C #` | `1 - 7` 或 `SUN, MON, TUE, WED, THU, FRI, SAT` | | 年(Year,可选) | `- * /` | `1970 - 2099`(可不写) | ### 常用字符含义 - `*`:表示匹配该域的任意值。例如,在秒域使用 `*` 表示每秒都执行。 - `/`:用于指定增量。例如,`0/15` 在秒域表示从第 0 秒开始,每隔 15 秒执行一次。 - `?`:只能用在日(Day-of-Month)和周(Day-of-Week)域,用于指定不指定的值。因为在这两个域中,不能同时指定具体值。 - `L`:表示最后,用在日域表示该月的最后一天,用在周域表示该周的最后一天(星期六)。 - `C`:只能在日(Day-of-Month)域和周(Day-of-Week)域出现,依靠指定的“日历”,若没有“日历”关联,则等价于所有包含的“日历”。如日期域是“5C”表示关联“日历”中第一天,或者这个月开始的第一天的后 5 天;星期域是“1C”表示关联“日历”中第一天,或者星期的第一天的后 1 天,也就是周日的后一天(周一) [^4]。 ### 示例 - `0 0 12 * * ?`:每天中午 12 点执行。 - `0 15 10 ? * *`:每天上午 10:15 执行。 - `0 0/5 14 * * ?`:每天下午 2 点到 2:55 期间,每隔 5 分钟执行一次。 ### 代码示例(Java 中使用 Quartz 框架) ```java import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrigger; public class CronTriggerExample { public static void main(String[] args) throws SchedulerException { // 创建调度器 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 定义一个 Job JobDetail job = newJob(MyJob.class) .withIdentity("myJob", "group1") .build(); // 定义一个 Trigger,使用 Cron 表达式 Trigger trigger = newTrigger() .withIdentity("myTrigger", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0 0 12 * * ?")) .build(); // 将 Job 和 Trigger 注册到调度器中 scheduler.scheduleJob(job, trigger); // 启动调度器 scheduler.start(); } } // 自定义 Job 类 class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Job is running at: " + new java.util.Date()); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值