Cron表达式说明

Cron表达式说明
Cron表达式说明

Cron表达式说明

Quartz使用类似于Linux下的Cron表达式定义时间规则,Cron表达式由6或7个由空格分隔的时间字段组成,如表1所示:

表1 Cron表达式时间字段

Cron表达式的时间字段除允许设置数值外,还可使用一些特殊的字符,提供列表、范围、通配符等功能,细说如下:

●星号(*):可用在所有字段中,表示对应时间域的每一个时刻,例如,*在分钟字段时,表示“每分钟”;

●问号(?):该字符只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于点位符;

●减号(-):表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12;

●逗号(,):表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五;

●斜杠(/):x/y表达一个等步长序列,x为起始值,y为增量步长值。如在分钟字段中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y;

●L:该字符只在日期和星期字段中使用,代表“Last”的意思,但它在两个字段中意思不同。L在日期字段中,表示这个月份的最后一天,如一月的31号,非闰年二月的28号;如果L用在星期中,则表示星期六,等同于7。但是,如果L出现在星期字段里,而且在前面有一个数值X,则表示“这个月的最后X天”,例如,6L表示该月的最后星期五;

●W:该字符只能出现在日期字段里,是对前导日期的修饰,表示离该日期最近的工作日。例如15W表示离该月15号最近的工作日,如果该月15号是星期六,则匹配14号星期

五;如果15日是星期日,则匹配16号星期一;如果15号是星期二,那结果就是15号星期二。但必须注意关联的匹配日期不能够跨月,如你指定1W,如果1号是星期六,结果匹配的是3号星期一,而非上个月最后的那天。W字符串只能指定单一日期,而不能指定日期范围;

●LW组合:在日期字段可以组合使用LW,它的意思是当月的最后一个工作日;

●井号(#):该字符只能在星期字段中使用,表示当月某个工作日。如6#3表示当月的第三个星期五(6表示星期五,#3表示当前的第三个),而4#5表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发;

● C:该字符只在日期和星期字段中使用,代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。1C在星期字段中相当于星期日后的第一天。

Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感。

表2下面给出一些完整的Cron表示式的实例:

quartz cron 表达式详解

字段允许值允许的特殊字符

秒0-59 , - * /

分0-59 , - * /

小时0-23 , - * /

日期1-31 , - * ? / L W C

月份1-12 或者JAN-DEC , - * /

星期1-7 或者SUN-SA T , - * ? / L C #

年(可选)留空, 1970-2099 , - * /

“*”字符被用来指定所有的值。如:”*“在分钟的字段域里表示“每分钟”。

“?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。

月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号(?)来表明不想设置那个字段。

“-”字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。

“,”字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”。

“/”字符用于指定增量。如:“0/15”在秒域意思是没分钟的0,15,30和45秒。“5/15”在分钟域表示没小时的5,20,35和50。符号“*”在“/”前面(如:*/10)等价于0在“/”前面(如:0/10)。记住一条本质:表达式的每个数值域都是一个有最大值和最小值的集合,如:秒域和分钟域的集合是0-59,日期域是1-31,月份域是1-12。字符“/”可以帮助你在每个字符域中取相应的数值。如:“7/6”在月份域的时候只有当7月的时候才会触发,并不是表示每个6月。

L是‘last’的省略写法可以表示day-of-month和day-of-week域,但在两个字段中的意思不同,例如day-of-month域中表示一个月的最后一天。如果在day-of-week域表示‘7’或者‘SA T’,如果在day-of-week域中前面加上数字,它表示一个月的最后几天,例如‘6L’就表示一个月的最后一个星期五。

字符“W”只允许日期域出现。这个字符用于指定日期的最近工作日。例如:如果你在日期域中写“15W”,表示:这个月15号最近的工作日。所以,如果15号是周六,则任务会在14号触发。如果15好是周日,则任务会在周一也就是16号触发。如果是在日期域填写“1W”即使1号是周六,那么任务也只会在下周一,也就是3号触发,“W”字符指定的最近工作日是不能够跨月份的。字符“W”只能配合一个单独的数值使用,不能够是一个数字段,如:1-15W是错误的。

“L”和“W”可以在日期域中联合使用,LW表示这个月最后一周的工作日。

字符“#”只允许在星期域中出现。这个字符用于指定本月的某某天。例如:“6#3”表示本

月第三周的星期五(6表示星期五,3表示第三周)。“2#1”表示本月第一周的星期一。“4#5”表示第五周的星期三。

字符“C”允许在日期域和星期域出现。这个字符依靠一个指定的“日历”。也就是说这个表达式的值依赖于相关的“日历”的计算结果,如果没有“日历”关联,则等价于所有包含的“日历”。如:日期域是“5C”表示关联“日历”中第一天,或者这个月开始的第一天的后5天。星期域是“1C”表示关联“日历”中第一天,或者星期的第一天的后1天,也就是周日的后一天(周一)。

表达式举例:

cron表达式转换为中文描述

function cronToChines (txt){ var r ="未指定具体时间(0 0 0 ? ? ?)" if (txt) { var regs = txt.split(' '); } var second = initDesc(regs[0], "second"); var min = initDesc(regs[1], "min"); var hour = initDesc(regs[2], "hour"); var day = initDescDay(regs[3]); var month = initDescMonth(regs[4]); var week = initDescWeek(regs[5]); var year ="每年"; if (regs.length > 6) { year = initDescYear(regs[6]); } return month+week+day+hour+min+second; } function initDesc(strVal, strid) { var ary = null; var v=""; if (strVal == "*") { }else if (strVal == "?") { } else { var s ="秒" if(strid=="min"){ s ="分" }else if(strid=="hour"){ s ="点" } ary = strVal.split(","); if(ary.length>1){ v ="["+strVal+"]"+s }else{ v =strVal+s } } return v; } function initDescDay(strVal) { var ary = null;

cronExpression详解

关于cronExpression的介绍 一个Cron-表达式是一个由六至七个字段组成由空格分隔的字符串,其中6个字段是必须的而一个是可选的,如下: 字段名允许的值允许的特殊字符 秒0-59, - * / 分0-59, - * / 小时0-23, - * / 日1-31, - * ? / L W C 月1-12 or JAN-DEC, - * / 周几1-7 or SUN-SAT, - * ? / L C # 年 (可选字段)empty, 1970-2099, - * / '*' 字符可以用于所有字段,在“分”字段中设为"*"表示"每一分钟"的含义。 '?' 字符可以用在“日”和“周几”字段. 它用来指定 '不明确的值'. 这在你需要指定这两个字段中的某一个值而不是另外一个的时候会被用到。在后面的例子中可以看到其含义。 '-' 字符被用来指定一个值的范围,比如在“小时”字段中设为"10-12"表示"10点到12点". ',' 字符指定数个值。比如在“周几”字段中设为"MON,WED,FRI"表示"the days Monday, Wednesday, and Friday". '/' 字符用来指定一个值的的增加幅度. 比如在“秒”字段中设置为"0/15"表示"第0, 15, 30, 和 45秒"。而 "5/15"则表示"第5, 20, 35, 和 50". 在'/'前加"*"字符相当于指定从0秒开始. 每个字段都有一系列可以开始或结束的数值。对于“秒”和“分”字段来说,其数值范围为0到59,对于“小时”字段来说其为0到23, 对于“日”字段来说为0到31, 而对于“月”字段来说为1到12。"/"字段仅仅只是帮助你在允许的数值范围内从开始"第n"的值。因此对于“月”字段来说"7/6"只是表示7月被开启而不是“每六个月”, 请注意其中微妙的差别。 'L'字符可用在“日”和“周几”这两个字段。它是"last"的缩写, 但是在这两个字段中有不同的含义。例如,“日”字段中的"L"表示"一个月中的最后一天" ——对于一月就是31号对于二月来说就是28号(非闰年)。而在“周几”字段中, 它简单的表示"7" or "SAT",但是如果在“周几”字段中使用时跟在某个数字之后, 它表示"该月最后一个星期×" ——比如"6L"表示"该月最后一个周五"。当使用'L'选项时,指定确定的列表或者范围非常重要,否则你会被结果搞糊涂的。 'W' 可用于“日”字段。用来指定历给定日期最近的工作日(周一到周五) 。比如你将“日”字段设为"15W",意为: "离该月15号最近的工作日"。因此如果15号为周六,触发器会在14号即周五调用。如果15号为周日, 触发器会在16号也就是周一触发。如果15号为周二,那么当天就会触发。然而如果你将“日”字段设为"1W", 而一号又是周六, 触发器会于下周一也就是当月的3号触发,因为它不会越过当月的值的范围边界。'W'字符只能用于“日”字段的值为单独的一天而不是一系

Cron表达式

Cron表达式 Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month DayofWeek Year或 Seconds Minutes Hours DayofMonth Month DayofWeek ?从左至右,这些元素的定义如下: ? ?1.秒(0–59) ? ?2.分钟(0–59) ? ?3.小时(0–23) ? ?4.月份中的日期(1–31) ? ?5.月份(1–12或JAN–DEC) ? ?6.星期中的日期(1–7或SUN–SAT) ? ?7.年份(1970–2099) 每一个域可出现的字符如下: Seconds:可出现", - * /"四个字符,有效范围为0-59的整数 Minutes:可出现", - * /"四个字符,有效范围为0-59的整数 Hours:可出现", - * /"四个字符,有效范围为0-23的整数 DayofMonth:可出现", - * / ? L W C"八个字符,有效范围为0-31的整数 Month:可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc DayofWeek:可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一,依次类推 Year:可出现", - * /"四个字符,有效范围为1970-2099年 每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是: (1)*:表示匹配该域的任意值,假如在Minutes域使用*, 即表示每分钟都会触发事件。

Quartz任务调度说明 CronTrigger + Spring

触发器中两个重要的触发器 1,SimpleTrigger :可以精确到毫秒,如果需要让任务只在某个时刻执行一次,或者,在某个时刻开始,然后按照某个时间间隔重复执行 例如: public SimpleTrigger(String name, //名称 String group, //组名 Date startTime, //开始时间 Date endTime, //结束时间(控制权高于重复次数属性)为null 时直到永远 int repeatCount, //重复次数(可能是0) long repeatInterval) //重复间隔(以毫秒为单位) 2,CronTrigger :像日历那样按日程来触发任务。可以指定诸如“每个周五中午”,或者“每个工作日的9:30”或者“从每个周一、周三、周五的上午9:00到上午10:00之间每隔五分钟”这样日程安排来触发。 也可以像SimpleTrigger一样,CronTrigger也有一个startTime以指定日程从什么时候开始,也有一个(可选的)endTime以指定何时日程不再继续. Cron表达式被用来配置CronTrigger实例.Cron表达式是一个由7个子表达式组成的字符串。每个子表达式都描述了一个单独的日程细节。这些子表达式用空格分隔,分别表示:秒分钟小时月中的天天周中的天年 秒---例如:3/5从第3秒开始每隔5秒触发一次 通配符('*')可以被用来表示域中“每个”可能的值 '?'字符可以用在day-of-month及day-of-week域中,它用来表示“没有指定值”。 'L'字符可以在day-of-month及day-of-week中使用,L是last的缩写。如时在day-of-month 中L表示的月的最后一天。在day-of-week中,表示"当月的最后的周XXX",例如:"6L" 或者"FRIL"都表示本月的最后一个周五。 '#'表示表示月中的第几个周几。例如:day-of-week 域中的"6#3" 或者"FRI#3" 表示“月中第三个周五”。 注意:对于单独触发器来说,有些日程需求可能过于复杂而不能用表达式表述,例如:9:00到10:00之间每隔5分钟触发一次,下午1:00到10点每隔20分钟触发一次。 这个解决方案就是创建两个触发器,两个触发器都运行相同的任务。 CronTrigger 例1 –一个简单的每隔5分钟触发一次的表达式 "0 0/5 * * * ?" CronTrigger 例2 –在每分钟的10秒后每隔5分钟触发一次的表达式(例如. 10:00:10 am, 10:05:10等.)。 "10 0/5 * * * ?" CronTrigger 例3 –在每个周三和周五的10:30,11:30,12:30触发的表达式。 "0 30 10-13 ? * WED,FRI" CronTrigger 例4 –在每个月的5号,20号的8点和10点之间每隔半个小时触发一次且不包括10点,只是8:30,9:00和9:30的表达式。

quartz corn参数配置 复杂表达式

Quartz中时间参数说明即Cron表达式 Cron表达式 Quartz使用类似于Linux下的Cron表达式定义时间规则,Cron表达式由6或7个由空格分隔的时间字段组成,如表1所示: 表1 Cron表达式时间字段 Cron表达式的时间字段除允许设置数值外,还可使用一些特殊的字符,提供列表、范围、通配符等功能,细说如下:

●星号(*):可用在所有字段中,表示对应时间域的每一个时刻,例如,*在分钟字段时,表示“每分钟”; ●问号(?):该字符只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于点位符; ●减号(-):表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12; ●逗号(,):表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五; ●斜杠(/):x/y表达一个等步长序列,x为起始值,y为增量步长值。如在分钟字段中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y; ●L:该字符只在日期和星期字段中使用,代表“Last”的意思,但它在两个字段中意思不同。L在日期字段中,表示这个月份的最后一天,如一月的31号,非闰年二月的28号;如果L 用在星期中,则表示星期六,等同于7。但是,如果L出现在星期字段里,而且在前面有一个数值X,则表示“这个月的最后X天”,例如,6L表示该月的最后星期五; ●W:该字符只能出现在日期字段里,是对前导日期的修饰,表示离该日期最近的工作日。例如15W表示离该月15号最近的工作日,如果该月15号是星期六,则匹配14号星期五;如果15日是星期日,则匹配16号星期一;如果15号是星期二,那结果就是15号星期二。但必须注意关联的匹配日期不能够跨月,如你指定1W,如果1号是星期六,结果匹配的是3号星期一,而非上个月最后的那天。W字符串只能指定单一日期,而不能指定日期范围; ●LW组合:在日期字段可以组合使用LW,它的意思是当月的最后一个工作日; ●井号(#):该字符只能在星期字段中使用,表示当月某个工作日。如6#3表示当月的第三个星期五(6表示星期五,#3表示当前的第三个),而4#5表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发; ● C:该字符只在日期和星期字段中使用,代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。1C在星期字段中相当于星期日后的第一天。 Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感。 表2下面给出一些完整的Cron表示式的实例: 表2 Cron表示式示例 表示式 说明

调度任务框架Quart的使用

Cron表达式 Quartz使用类似于Linux下的Cron表达式定义时间规则,Cron表达式由6或7个由空格分隔的时间字段组成,如表1所示: 表1 Cron表达式时间字段 位置时间域名允许值允许的特殊字符 1 秒0-59 , - * / 2 分钟0-59 , - * / 3 小时0-23 , - * / 4 日期1-31 , - * ? / L W C 5 月份1-12 , - * / 6 星期1- 7 , - * ? / L C # 7 年(可选) 空值1970-2099 , - * / Cron表达式的时间字段除允许设置数值外,还可使用一些特殊的字符,提供列表、范围、通配符等功能,细说如下: ●星号(*):可用在所有字段中,表示对应时间域的每一个时刻,例如,*在分钟字段时,表示“每分钟”; ●问号(?):该字符只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于点位符; ●减号(-):表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12; ●逗号(,):表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五; ●斜杠(/):x/y表达一个等步长序列,x为起始值,y为增量步长值。如在分钟字段中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y; ●L:该字符只在日期和星期字段中使用,代表“Last”的意思,但它在两个字段中意思不同。L在日期字段中,表示这个月份的最后一天,如一月的31号,非闰年二月的28号;如果L用在星期中,则表示星期六,等同于7。但是,如果L出现在星期字段里,而且在前面有一个数值X,则表示“这个月的最后X天”,例如,6L表示该月的最后星期五; ●W:该字符只能出现在日期字段里,是对前导日期的修饰,表示离该日期最近的工作日。例如15W表示离该月15号最近的工作日,如果该月15号是星期六,则匹配14号星期五;如果15日是星期日,则匹

【SpringBoot】廿五、SpringBoot中使用Quartz管理定时任务

【SpringBoot】廿五、SpringBoot中使用Quartz管理定 时任务 2020-07-21 15:55:47 定时任务在系统中用到的地方很多,例如每晚凌晨的数据备份,每小时获取第三方平台的Token 信息等等,之前我们都是在项目中规定这个定时任务什么时候启动,到时间了便会自己启动,那么我们想要停止这个定时任务的时候,就需要去改动代码,还得启停服务器,这是非常不友好的事情 直至遇见 Quartz,利用图形界面可视化管理定时任务,使得我们对定时任务的管 理更加方便,快捷 一、Quartz 简介 Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和 J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个 作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持cron-like表达式等等。 二、开发前戏 1、引入 maven 依赖 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-quartz 这里引入了 web 的依赖,以及 Quartz 的依赖,其余依赖请根据需求自行引入

quartz实现多任务动态调度

一、说明 由于最近工作要实现定时任务的执行,而且要求定时周期是不固定的,所以就用到了quartz来实现这个功能; spring3.1以下的版本必须使用quartz1.x系列,3.1以上的版本才支持quartz 2.x,不然会出错。至于原因,则是spring对于quartz的支持实现,org.springframework. scheduling.quartz.CronTriggerBean继承了org.quartz.CronTrigger,在quartz1.x 系列中org.quartz.CronTrigger是个类,而在quartz2.x系列中org.quartz.CronTrigg er变成了接口,从而造成无法用spring的方式配置quartz的触发器(trigger)。 我使用的quartz版本是2.2.1 。 最终实现的功能: 1)项目启动时,可执行的定时任务启动,按时执行相应的逻辑; 2)可添加新任务,删除任务,更新任务,暂停任务,恢复任务; 二、添加quartz包 我使用Gradle构建项目,加包时只需下面一行即可: compile "org.quartz-scheduler:quartz:2.2.1" 三、配置及使用 1. 配置任务调度器(对应的文件名为quartz-task.xml) ? 1 2 3

Quartz Cron 表达式(时间格式的写法)

Quartz Cron 表达式(时间格式的写法) Quartz cron 表达式的格式十分类似于 UNIX cron 格式,但还是有少许明显的区别。区别之一就是 Quartz 的格式向下支持到秒级别的计划,而 UNIX cron 计划仅支持至分钟级。许多我们的触发计划要基于秒级递增的(例如,每45秒),因此这是一个非常好的差异。 在 UNIX cron 里,要执行的作业(或者说命令)是存放在 cron 表达式中的,在第六个域位置上。Quartz 用 cron 表达式存放执行计划。引用了 cron 表达式的 CronTrigger 在计划的时间里会与job 关联上。 另一个与UNIX cron 表达式的不同点是在表达式中支持域的数目。UNIX 给出五个域(分、时、日、月和周),Quartz 提供七个域。表 5.1 列出了 Quartz cron 表达式支持的七个域。 名称是否必须允许值特殊字符 秒是0-59, -* / 分是0-59, -* / 时是0-23, -* / 日是1-31, -* ? / L W C 月是1-12 或 JAN-DEC, -* / 周是1-7 或 SUN-SAT, -* ? / L C # 年否空 或 1970-2099, -* / 月份和星期的名称是不区分大小写的。FRI 和 fri 是一样的。 域之间有空格分隔,这和 UNIX cron 一样。无可争辩的,我们能写的最简单的表达式看起来就是这个了: * * * ? * * 这个表达会每秒钟(每分种的、每小时的、每天的)激发一个部署的 job。 ?理解特殊字符 同 UNIX cron 一样,Quartz cron 表达式支持用特殊字符来创建更为复杂的执行计划。然而,Quartz 在特殊字符的支持上比标准 UNIX cron 表达式更丰富了。 * 星号 使用星号(*) 指示着你想在这个域上包含所有合法的值。例如,在月份域上使用星号意味着每个月都会触发这个trigger。 表达式样例: 0 * 17 * * ? 意义:每天从下午5点到下午5:59中的每分钟激发一次 trigger。它停在下午 5:59 是因为值17 在小时域上,在下午 6 点时,小时变为18 了,也就不再理会这个trigger,直到下一天的下午5点。 在你希望 trigger 在该域的所有有效值上被激发时使用 * 字符。 ? 问号 ? 号只能用在日和周域上,但是不能在这两个域上同时使用。你可以认为? 字符是 "我并不关心在该域上是什么值。" 这不同于星号,星号是指示着该域上的每一个值。? 是说不为该域指定值。 不能同时这两个域上指定值的理由是难以解释甚至是难以理解的。基本上,假定同时指定值的话,意义就会变得含混不清了:考虑一下,如果一个表达式在日域上有值11,同时在周域上指定了 WED。那么是要 trigger 仅在每个月的11号,且正好又是星期三那天被激发?还是在每个星期三的11号被激发呢?要去除这种不明确性的办法就是不能同时在这两个域上指定值。 只要记住,假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个?。 表达式样例: 0 10,44 14 ? 3 WEB 意义:在三月中的每个星期三的下午 2:10 和 下午 2:44 被触发。 , 逗号 逗号(,) 是用来在给某个域上指定一个值列表的。例如,使用值0,15,30,45 在秒域上意味着每15秒触发一个trigger。 表达式样例: 0 0,15,30,45 * * * ? 意义:每刻钟触发一次 trigger。 / 斜杠 斜杠 (/) 是用于时间表的递增的。我们刚刚用了逗号来表示每15分钟的递增,但是我们也能写成这样0/15。 表达式样例: 0/15 0/30 * * * ? 意义:在整点和半点时每15秒触发trigger。 -中划线 中划线(-) 用于指定一个范围。例如,在小时域上的 3-8 意味着"3,4,5,6,7 和 8 点。" 域的值不允许回卷,所以像 50-10 这样的值是不允许的。 表达式样例: 0 45 3-8 ? * * 意义:在上午的3点至上午的8点的45分时触发trigger。 L 字母 L 说明了某域上允许的最后一个值。它仅被日和周域支持。当用在日域上,表示的是在月域上指定的月份的最后一天。例如,当月域上指定了 JAN 时,在日域上的 L 会促使 trigger 在1月31号被触发。假如月域上是 SEP,那么L 会预示着在9月30号触发。换句话说,就是不管指定了哪个月,都是在相应月份的时最后一天触发trigger。 表达式 0 0 8 L * ? 意义是在每个月最后一天的上午 8:00 触发trigger。在月域上的 * 说明是 "每个月"。 当L 字母用于周域上,指示着周的最后一天,就是星期六 (或者数字7)。所以如果你需要在每个月的最后一个星期六下午的 11:59 触发trigger,你可以用这样的表达式 0 59 23 ? * L。 当使用于周域上,你可以用一个数字与L 连起来表示月份的最后一个星期 X。例如,表达式 0 0 12 ? * 2L 说的是在每个月的最后一个星期一触发trigger。

application定时器

Quartz定时发送消息的功能,该功能依附于Web应用上,即当Web应用启动时,该应用就开始作用。起先决定使用java.util.Timer和 java.util.TimerTask来实现,但是研究了一下以后发现Java Timer的功能比较弱,而且其线程的范围不受Web应用的约束。后来发现了Quartz这个开源的调度框架,非常有趣。 首先我们要得到Quartz的最新发布版。目前其最新的版本是1.6。我们可以从以下地址获得它的完整下载包,包中可谓汤料十足,不仅有我们要的quartz.jar,更包含多个例程和详细的文档,从API到配置文件的XSD一应俱全。感兴趣的朋友也可以在src目录下找到该项目的源码一看究竟。 废话少说,下面就来看一看这个东东是怎么在Java Web Application中得以使用的。 首先不得不提出的是Quartz的三个核心概念:调度器、触发器、作业。让我们来看看他们是如何工作的吧。 一.作业总指挥——调度器 1.Scheduler接口 该接口或许是整个Quartz中最最上层的东西了,它提携了所有触发器和作业,使它们协调工作。每个Scheduler都存有JobDetail和Trigger的注

册,一个Scheduler中可以注册多个JobDetail和多个Trigger,这些JobDetail和Trigger都可以通过group name和他们自身的name加以区分,以保持这些JobDetail和Trigger的实例在同一个Scheduler内不会冲突。所以,每个Scheduler中的JobDetail的组名是唯一的,本身的名字也是唯一的(就好像是一个JobDetail的ID)。Trigger也是如此。 Scheduler实例由SchedulerFactory产生,一旦Scheduler实例生成后,我们就可以通过生成它的工厂来找到该实例,获取它相关的属性。下面的代码为我们展示了如何从一个Servlet中找到SchedulerFactory并获得相应的Scheduler实例,通过该实例,我们可以获取当前作业中的testmode 属性,来判断该作业是否工作于测试模式。 Java代码 1.//从当前Servlet上下文中查找StdSchedulerFactory 2. 3. ServletContext ctx=request.getSession().getSer vletContext(); 4. 5. StdSchedulerFactory factory = (StdSchedulerFac tory) ctx.getAttribute("org.quartz.impl.StdSchedulerFactor y.KEY"); 6. 7. Scheduler sch = null; 8. 9.try { 10. 11.//获取调度器

安徽理工大学Linux复习题

<> 复习题仅供参 考 第一章习题: 1.Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统。 2.系统交换分区是作为系统虚拟存储器的一块区域。 3.内核分为进程管理系统、内存管理系统、I/O管理系统和文件管理系统 等四个子系统。 4.进行远程登录的命令是telnet 。 5.在Linux系统下,第二个IDE通道的硬盘(从盘)被标识为hdb 6.Linux通常使用ext3 格式的文件系统 第二章习题: 1.将前一个命令的标准输出作为后一个命令的标准输入,称之为_管道____。 2.可以在标准输出上显示整年日历的命令及参数是_ cal 年份_____ 3._shell____不仅是用户命令的解释器,它同时也是一种功能强大的编程语言。 __bash____是Linux的缺省shell。 4.用_>>___符号将输出重定向内容附加在原文的后面。 5.若一台计算机的内存为128MB,则交换分区的大小通常是_C___。 A 64M B B 128MB C 256MB D 512MB 第三章习题: 1.Linux文件系统中每个文件用i节点来标识。 2.链接分为:硬链接和符号链接。 3.某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限,则该八进制数为: 644 ,该文件属性是目录文件。 4.可以用ls –al命令来观察文件的权限,每个文件的权限都用10位表示,并分为 四段,其中第一段占 1 位,表示文件类型,第二段占3位,表示文件属主对该文件的权限。 5.硬连接只能建立对文件链接。符号链接可以跨不同文件系统创建。 6.套接字文件的属性位是s , 管道文件的属性位是p 7.进行字符串查找,使用grep 命令。 8.使用* 每次匹配若干个字符。 9./sbin 目录用来存放系统管理员使用的管理程序。 10.Linux文件权限一共10位长度,分成四段,第三段表示的内容是 C 。 A 文件类型 B 文件所有者的权限 C 文件所有者所在组的权限 D 其他用户的权限 11.在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是 D 。 A -m B -d C -f D -p 12.下列关于链接描述,错误的是 B 。 A 硬链接就是让链接文件的i节点号指向被链接文件的i节点 B 硬链接和符号连接都是产生一个新的i节点

Unix试题与答案

简答题: 1、进程调度中"可抢占"和"非抢占"两种方式,哪一种系统的开销更大?为什么? 答:(1)可抢占式会引起系统的开销更大。(2)可抢占式调度是严格保证任何时刻,让具有最高优先数(权)的进程占有处理机运行,因此增加了处理机调度的时机,引起为退出处理机的进程保留现场,为占有处理机的进程恢复现场等时间开销增大。 2、一个含五个逻辑记录的文件,系统把它以链接结构的形式组织在磁盘上,每个记录占用一个磁盘块,现要求在第一记录和第二记录之间插入一个新记录,简述它的操作过程。答:从文件目录中找到该文件,按址读出第一个记录;取出第一个记录块中指针,存放到新记录的指针位置;把新记录占用的物理块号填入第一个记录的指针位置启动磁盘把第一个记录和新记录写到指字的磁盘块上。 3、在spool 系统中设计了一张"缓输出表",请问哪些程序执行时要访问缓输出表,简单说明之。 答:井管理写程序把作业执行结果文件登记在缓输出表中;缓输出程序从缓输出表中查找结果文件并打印输出。 4、试比较进程调度与作业调度的不同点 答:(1)作业调度是宏观调度,它决定了哪一个作业能进入主存。进程调度是微观调度,它决定各作业中的哪一个进程占有中央处理机(或)作业调度是高级调度,它位于操作系统的作业管理层次。进程调度是低级调度,它位于操作系统分层结构的最内层。 作业调度是选符合条件的收容态作业装入内存。进程调度是从就绪态进程中选一个占用处理机。 5、试说明资源的静态分配策略能防止死锁的原因。 答:资源静态分配策略要求每个进程在开始执行前申请所需的全部资源,仅在系统为之分配了所需的全部资源后,该进程才开始执行。这样,进程在执行过程中不再申请资源,从而破坏了死锁的四个必要条件之一“占有并等待条件”,从而防止死锁的发生。 6、部分指令作用 $ more file.c [Return] 逐页显示file.c的文件内容 $ cat aa.c bb.c>>cc.c [Return] 将aa.c中的内容与bb.c中的 内容进行连接,追加到cc.c中$ cat aa.c bb.c >cc.c [Return] 将aa.c中的内容与bb.c中的 内容进行连接,构成一个新的 文件cc.c $ cd $HOME [Return] 将当前工作目录改变到用户主目录下 $ chmod go-w filea [Return] 撤销同组用户及其他用户 对文件filea的写权 grep the file [Return] 显示file文件中包含字符串the的行find /home \(-name core –o –name a.out\) –atime +3 –exec rm {} \;[Return] 在/home目录及其子目录中查找名为core或名为a.out的文件,若找到的这些文件在3 天之内未被访问过,则执行删除命令将其删除 wc -l file.c [Return] 统计file.c文件的行数 cat ,more,pg 显示文件内容的命令 rm *.* 删除文件名中至少包含一个点号的文件 rm * 删除所有的文件 rm a* 删除a打头的所有的文件 rm a * 删除文件a,并删除所有的文件。 mkdir创建目录命令。创建目录时要求在上级目录中才能创建。 rmdir 命令删除目录。删除目录要对空子目录才能删除,且处于上级目录。 cd 返回用户主目录 cd .到当前目录 cd ..到当前目录的父目录 cd / 到根目录四条命令的执行结果。 find . -name hello -print 寻找目前目录及所有的子目录 内叫hello的文档 find . -ctime +7 -print 找出七天内未被更动的文档find . -size +2000m -print 找出大小超过2000 bytes的文档find /tmp -user b1234567 -print 在/tmp下属於b1234567的文档find . -name '*.c' -exec rm {} 删除所有的.c档 find . -name test\* -print 显示当前目录及其子目录文件 名前4位为test的文件名7、说明三种引号的作用什么? 单引号:使用单引号时,shell解释程序将单引号中的内容看成纯粹的 字符串信息,不包含有shell命令中的特殊意义。 双引号:使用双引号时,shell解释程序将引号内的shell特殊字符仍作 为shell中的含义解释,这样shell变量或命令可与引号中的字符串结 合起来使用。 反引号:如果将shell命令用反引号括起来进行变量赋值时,表示变量 中存放的是执行命令的结果。 8、什么是前台作业和后台作业? 前台作业指与用户直接交互的进程 后台作业指不与用户直接交互的进程 9、文件的硬链接和符号链接有何不同? 硬链接的节点号是所链接的文件的节点号,符号链接的节点号是自己 的节点号。 10、使用Shell编程,如何将脚本提交给系统运行? 利用输入/输出重定向的方式完成运行:$ sh < file1.sh; 将文件当作sh命令的执行参数来运行:$ sh file1.sh; 使用直接方式执行shell程序 11、vi编辑器有哪些工作方式? 命令行方式、末行命令方式、插入编辑方式 12、UNIX系统的进程映像由哪几部分组成? Proc结构和user结构、用户栈和系统栈、正文段和数据段 13、列举进程调度的时机? (1)当进程执行中自动放弃了处理器运行时进行一次进程调度; (2)当进程由系统态转入用户态时,系统安排产生一次调度时机; 14、指令命令: 1)将文件file的文件组改为group的命令为(chgrp group file)。 2)显示文件file1的后500行的命令为(tail -500 file1 )。 3)将目录/oradata/WebLogic103/CQBS下的文件file.txt拷贝到 /oradata/release_version/bakprocess目录下的命令为()。 cp/oradata/WebLogic103/CQBS/file.txt__/oradata/release_versio n/bakprocess 4)解压压缩文件warname.jar的linux命令为()。 Tar – vxf warname.jar 压缩warname文件tar cvf warname 5)将字符串“Hello,world”追加到文件hello.txt中的命令是()。 Echo …hello,world? >> hello.txt 6)在指定的文件中搜索模式用grep命令,模式是正则表达式,在文 件hello.log中搜索行首出现字符串helloworld的行用命令()。 grep ^helloworld* hello.log 7)给文件赋权限用chmod命令,对文件file 增加文件主可执行权限 的命令是()。 Chmod +X file 8)在当前的test目录下查找所有以test打头的文件,用命令()。 Find – name test/test* 9)从unix主机上取一个文件到本机上用命令()。 Get filename unix下启动oracle监听和数据库的命令分别是(lsnrctl start )和 (startup )。 15、全部磁盘块由四个部分组成,分别为引导块、专用块、 i节点表块和数据存储块。 答:Linux系统中的每个文件都被赋予一个唯一数值,这个数值称做索 引节点。索引节点存储在一个称作索引节点表<inode table>中,该 表在磁盘格式化时被分配。每个实际的磁盘或分区都有其自己的索引 节点表。一个索引节点包含文件的所有信息,包括磁盘上数据的地址 和文件类型。文件类型包括如普通文件、目录和特殊文件这样的信息。 linux硬盘组织方式为:引导区、超级块(superblock),索引结点(inode), 数据块(datablock),目录块(diredtory block)。其中超级块中包含了关 于该硬盘或分区上的文件系统的整体信息,如文件系统的大小等;超 级块后面的数据结构是索引结点,它包含了针对某一个具体文件的几 乎全部信息,如文件的存取权限、所有者、大小、建立时间以及对应 的目录块和数据块等;数据块是真正存储文件内容的位置。但是索引 结点中不包括文件的名字,文件名是放在目录块里的。目录块里包含 有文件的名字以及此文件的索引结点编号。 16、简述Linux文件系统通过i节点把文件的逻辑结构和物 理结构转换的工作过程。 答:Linux通过i节点表将文件的逻辑结构和物理结构进行转换。 i节点是一个64字节长的表,表中包含了文件的相关信息,其中有文 件的大小、文件所有者、文件的存取许可方式以及文件的类型等重要 信息。在i节点表中最重要的内容是磁盘地址表。在磁盘地址表中有 13个块号,文件将以块号在磁盘地址表中出现的顺序依次读取相应的 块。Linux文件系统通过把i节点和文件名进行连接,当需要读取该文 件时,文件系统在当前目录表中查找该文件名对应的项,由此得到该 文件相对应的i节点号,通过该i节点的磁盘地址表把分散存放的文件 物理块连接成文件的逻辑结构。 17、简述进程的启动、终止的方式以及如何进行进程的查看。 答:在Linux中启动一个进程有手工启动和调度启动两种方式: (1)手工启动 用户在输入端发出命令,直接启动一个进程的启动方式。可以分为: ①前台启动:直接在SHELL中输入命令进行启动。 ②后台启动:启动一个目前并不紧急的进程,如打印进程。 (2)调度启动 系统管理员根据系统资源和进程占用资源的情况,事先进行调度安排, 指定任务运行的时间和场合,到时候系统会自动完成该任务。 经常使用的进程调度命令为:at、batch、crontab。 18、简述安装Slackware Linux系统的过程。 答:(1)对硬盘重新分区。(2)启动Linux系统(用光盘、软盘等)。 (3)建立Linux主分区和交换分区。(4)用setup命令安装Linux系 统。(5)格式化Linux主分区和交换分区(6)安装Linux软件包 (7)安装完毕,建立从硬盘启动Linux系统的LILO启动程序,或者 制作一张启动Linux系统的软盘。重新启动Linux系统。 19、进程的查看和调度分别使用什么命令? 答:进程查看的命令是ps和top。 进程调度的命令有at,crontab,batch,kill。 20、解释i节点在文件系统中的作用。 答:在linux文件系统中,是以块为单位存储信息的,为了找到某一个 文件在存储空间中存放的位置,用i节点对一个文件进行索引。I节点 包含了描述一个文件所必须的全部信息。所以i节点是文件系统管理 的一个数据结构。 21、什么是符号链接,什么是硬链接?符号链接与硬链接的 区别是什么? 答:链接分硬链接和符号链接。 符号链接可以建立对于文件和目录的链接。符号链接可以跨文件系统, 即可以跨磁盘分区。符号链接的文件类型位是l,链接文件具有新的i 节点。 硬链接不可以跨文件系统。它只能建立对文件的链接,硬链接的文件 类型位是-,且硬链接文件的i节点同被链接文件的i节点相同。 22、在对linux系统分区进行格式化时需要对磁盘簇(或i 节点密度)的大小进行选择,请说明选择的原则。 答:磁盘簇(或i节点密度)是文件系统调度文件的基本单元。磁盘簇 的大小,直接影响系统调度磁盘空间效率。当磁盘分区较大时,磁盘 簇也应选得大些;当分区较小时,磁盘簇应选得小些。通常使用经验 值。 23、某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义。 答:(1)第一列:将被加载的文件系统名;(2)第二列:该文件系统 的安装点;(3)第三列:文件系统的类型;(4)第四列:设置参数; (5)第五列:供备份程序确定上次备份距现在的天数;(6)第六列: 在系统引导时检测文件系统的顺序。 24、画图描述Unix系统的结构。(5分) Shell 驻留模块内核硬件用户 25、简述root的特权有哪些?(8分) 答:增加或删除一个Unix用户的帐号;增加或删除用户对计算机资 源的使用限制;设置系统的日期或时间;建立设备文件;创建、安装 和拆卸文件系统;修改进程的根目录;修改文件的属性。 26、请比较在shell中单引号、双引号、反引号用法的差别? 答:当shell碰到第一个单引号时,它将忽略掉其后所有特殊字符, 直到右引号位置结束;双引号告诉shell在引号内照样进行变量名替换; 反引号:命令替换,在shell中将一个命令的标准输出插在一个命令 行中任何位置。 27、对文件和目录的R.W.X权各有什么含义?(12分) 1)如何做到除文件属主外,任何用户无法访问HOME下的 src目录 2)如何做到使HOME下的bin目录中的文件既可被用户共 享,又不会被用户破坏? 3)对一个目录分别给予、取消对目录的r、x权 答:r:读目录文件,如列出目录中的文件,w:修改目录文件,增加、 删除或修改文件x:在文件的路径名中使用该目录名。 1)chmod 600 HOME/src 2)如何做到使HOME下的bin目录中的文件既可被用户共享,又不会 被用户破坏? 3)chmod +rx 目录chmod –rx 目录 28、考虑如下命令序列: ls –R /usr >/tmp/usr_list & wc –l < /tmp/usr_list & rm /tmp/usr_list 它和命令ls –R/usr | wc –l等价吗?为什么?( 8分) 答:等价的,因为命令序列的第一行是列出usr目录下的所有文件并把 结果重定向到tmp/usr-list文件中(后台执行),第二行是统计tmp/usr-list 文件的行数(后台执行),最后一行删除tmp/usr-list文件,全部命令 行的作用就是统计出usr目录下的文件数,而后面的ls –R/usr | wc –l 命令是利用管道连接线直接把第一个命令ls –R/usr的执行结果作为后 面wc –l的输入,结果也是统计出usr目录下的文件数。 29、对test目录使用命令ls –li test 得到如下结果: total 3 12395 –rw-r--r--2 chr 405 Jun 10 17:05 demo.c 12395 –rw-r--r--2 chr 405 Jun 10 17:05 t1.c 12399 –rw-r--r--2 chr 405 Jun 10 17:05 t2.c-->t1.c 请分析这一结果,并解释文件之间的关系。 答:demo.c和t1.c文件互为硬链接,他们使用同一个i节点,内容一 样,t2.c是t1.c文件的符号链接,有自己独立的i节点号,它的内容直 接指向t1.c。 30、利用find和grep命令的结合,从当前目录中查找包含 “sortresult”的文件。 答:find ./ -name "*" -exec grep "sortresult " {} \ 31、简述进程的启动、中止的方式以及如何进行进程的查 看? 答:进程的启动,可以直接输入命令启动,可以使用at batch crontab 来定时启动,终止进程,进程可以通过Ctrl+C或Crtl+\组合键,或者 通过kill命令来终止。使用ps命令可以查看进程。 32、crontab中用什么命令定义某个程序执行的优先级别? 答:nice:进程执行优先级,进程优先级:系统按进程优先级的不同分 配CPU时间,优先级高的进程会得到更多的CPU使用时间,以提高 速度,缩短总的执行时间。 进程优先级范围:-20至19,最高等级:-20,最低等级:19,系统管理员 有权将进程优先级设置为-1至-20,而普通用户只能设置0至19。进程 运行的默认等级为0。 用nice执行的进程其默认等级为10(即nice <程序名>,不指定等级时)。 格式:nice <程序名>;nice -<等级> <程序名> (命令后加&表示后台运行) nice vi & 优先等级0,默认等级。 nice vi & 优先等级10,使用nice执行程序时的默认等级。 nice -50 vi & 优先等级19,-号表示选项,等级50超过最低等级19, 因此系统以等级19执行。 nice -18 vi & 优先等级18。 nice --50 vi & 优先等级-20,选项值为-50,超过最高等级-20,因此系 统以等级-20执行。 nice --18 vi & 优先等级-18。

相关文档
最新文档