背景:
我们的业务是这样的。上游系统会生成文件,然后把这些文件打成zip,archrive到我们的一个ftp服务器上,然后我们的系统就会每天定时的run一个job,去消费这个文件,最后把处理完的数据直接insert到我们的db里。
但是有一个在开发环境上,我们系统的job,下线了,但是我们的作为开发,又很依赖每天的数据,然后我们就只能去手工的wget这个文件,然后解压,再删除zip文件。再喂给我们的系统。 每天自己去跑一遍真傻。为什么不写一个定时任务,每天定时跑尼。 这样就把自己解放出来了。
方案:
之前就知道cronjob可以定时跑任务,而且自己去改过前人的一些脚本。但是从头开始写来满足自己的需求还是第一次。
首先就是要知道cron的表达式,这个网上一搜一大堆。
随便在网上找了一个:
引用
1 2 3 4 5 /root/backup.sh
Where,
1: Minute (0-59)
2: Hours (0-23)
3: Day (0-31)
4: Month (0-12 [12 == December])
5: Day of the week(0-7 [7 or 0 == sunday])
/path/to/command - Script or command name to schedule
Easy to remember format:
* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)
很明显前面5 位 是日期时间的一些设置,后面就是要执行的具体的command line或者是shell script。
对cron表达式有一个基本的了解之后,然后就是根据自己的需求来写了。
需求:
我要在工作日,每天早上6点30的时候,去拿这些数据。
30 6 * * 1-5 sh /server/fcm/tools/loadEodData.sh
很明显我是想在6:30的时候去跑一个shell,让shell来帮我做取数据和unzip等等的人工操作。
那么我要接下来我就要写我的sh了。
DATE=$(date -d today +"%Y-%m-%d")
##DATE=$(date -d "2015-11-10" +"%Y-%m-%d")
echo $DATE
PATH="http://web01.eexchange.com:9090/logs/archive/CC_Eod_US_$DATE.zip"
cd /server/rbseod/us
/usr/bin/wget $PATH
echo $PATH
/usr/bin/unzip CC_Eod_US_$DATE.zip
/bin/rm -rf CC_Eod_US_$DATE.zip
PATH="http://web01.eexchange.com:9090/logs/archive/CC_Eod_UK_$DATE.zip"
cd /server/rbseod/uk
/usr/bin/wget $PATH
echo $PATH
/usr/bin/unzip CC_Eod_UK_$DATE.zip
/bin/rm -rf CC_Eod_UK_$DATE.zip
echo "Data Retrive Success at $DATE." >>/server/fcm/logs/EODDataRetrive.log
当初取date很久没有取出来,后来用了两遍的$符号,终于拿到了正确的日期。
----EOF----
分享到:
相关推荐
如果你想在特定日期和时间执行一次性任务,可以使用`AddJob`方法,它接受一个Cron表达式和一个`cron.Job`接口的实现。例如,我们可以创建一个只执行一次的定时任务: ```go job := cron.NewJob(func() { // 任务...
逗号用于分隔多个值,如`1,5,10`表示在第1、5和10个小时执行。短横线表示范围,如`5-10`在"小时"字段表示从5点到10点的每个小时。斜线用于指定步进值,如`*/5`在"分钟"字段表示每5分钟执行一次。 在实际使用中,...
总的来说,Cron表达式生成器是一个强大的工具,可以帮助开发者简化创建和理解复杂的Cron表达式的过程,而Quartz等调度框架则利用这些表达式实现高效的任务自动化。理解和掌握Cron表达式及其生成器,对于任何涉及定时...
cron-last-sunday 是一个用于 Linux 系统的实用工具,它扩展了标准的 cron 定时任务系统,允许用户在每月的第一个、第 n 个或最后一个工作日执行特定的 cron 任务。这个功能对于那些需要在特定工作日执行任务的自动...
- ,:列举多个值,如1,3,5表示第1、3、5个 - /:定义增量,如*/5表示每隔5个单位 - ?:在某些字段中,表示不指定值,通常用于月份中的哪一天和星期 在Quartz中,你可以通过CronTrigger类来创建基于cron表达式的...
创建一个Quartz作业(Job)是第一步。在Java中,我们需要定义一个实现了`org.quartz.Job`接口的类,这个类将包含我们实际要执行的任务逻辑。例如: ```java import org.quartz.Job; import org.quartz....
`node-cron` 是一个专为Node.js设计的轻量级任务调度库,它允许开发者在服务器端设置类似于Linux `cron` 的定时任务。这个库使得开发者能够方便地在JavaScript环境中创建周期性的作业,比如定时发送邮件、清理日志、...
在Quartz中,我们可以使用`CronTrigger`类来创建基于cron表达式的触发器,并将其与作业(Job)关联,从而定义定时任务。`CronTrigger`的构造函数通常接受cron表达式字符串作为参数。 在实际应用中,理解并熟练掌握...
然后,你可以创建一个`cron.Cron`实例,并使用`AddFunc`或`AddJob`方法添加定时任务,传入一个cron表达式和要执行的函数。`Cron`实例会负责根据表达式定期执行相应的任务。 ```go import ( "github....
部署 Job (第一部分) 内容提要:介绍 Scheduler 和 SchedulerFactory 有哪些类型、SchedulerFactory 的关键 API 方法;以及如何通过 java.util.Properties 实例或默认 quartz.properties 文件创建 Scheduler。 第...
- `,`:指定一组值,例如`1,3,5`表示第1、3、5个值 - `/`:步进值,例如`*/5`表示每5个单位执行一次 - `?`:在某些实现中,用于指定“任意”或“不关心”的值,但在Quartz中通常不使用 - `L`:在月份或星期字段...
在实际使用中,我们通常会创建一个Job类,实现`org.quartz.Job`接口,并重写`execute(JobExecutionContext context)`方法,这个方法包含了作业的具体业务逻辑。然后,创建一个Trigger实例,设置它的触发规则,最后...
- 第1个字段:秒(0-59) - 第2个字段:分钟(0-59) - 第3个字段:小时(0-23) - 第4个字段:日(1-31) - 第5个字段:月(1-12) - 第6个字段:星期(1-7,1代表周日,或者用英文首字母如SU, MO, TU, WE, TH, FR,...
- **设计**:创建一个JobStatus模型和关联表,记录每个Job实例的ID、状态(如PENDING、PROGRESS、COMPLETED、FAILED)和可能的错误信息。 - **监听器**:利用事件监听器(Event Listeners)在Job的`handle`方法...
在阅读《Quartz Job Scheduling Framework》第5章时,你会了解到如何创建和配置Cron Triggers,如何结合SimpleTrigger和CalendarIntervalTrigger实现不同类型的定时任务,以及如何优化Quartz的配置以适应大规模的...
例如,我们创建一个名为`HelloJob`的类,它实现了`org.quartz.Job`接口,并重写了`execute`方法,这是实际执行的任务逻辑: ```java import org.quartz.Job; import org.quartz.JobExecutionContext; import org....
1. **创建Job类**:定义一个实现了`org.quartz.Job`接口的类,这个类包含了你要定时执行的业务逻辑。 2. **定义Trigger**:创建一个`org.quartz.Trigger`实例,设置触发任务执行的时间规则,如cron表达式。 3. **...
Quartz Job Scheduling Framework是一个强大的、开源的作业调度框架,用于在Java应用程序中安排和执行任务。本章的翻译初稿主要聚焦于Quartz的核心概念和功能,旨在帮助开发者理解和利用这一工具进行复杂的定时任务...