scheduleJob

Parent Previous Next


语法


scheduleJob(jobId, jobDesc, jobFunc, scheduleTime, startDate, endDate, frequency, [days], [onComplete])


参数


jobId是一个字符串。


jobDesc是关于任务描述的字符串。


jobFunc是一个没有参数的函数。它通常是一个部分应用。


scheduleTime是一个MINUTE类型的标量/向量。


startDate是一个日期标量。


endDate是一个日期标量。


frequency是一个字符。它可以是下列3个值之一:’D‘表示每日,’W‘表示每周,’M‘表示每月。


days是一个整型标量/向量,表示执行定时任务的日期。如果frequency为W或M时,它是必需的。如果frequency为W,days可以取以下值:0(周日), 1(周一), ..., 5(周五), 6(周六)。


onComplete是一个有4个参数的回调函数,细节请见以下最后一个例子。当定时作业执行完毕(包括有异常的情况)后,会执行该函数。可通过该函数向外部消息系统如邮件系统或微信与钉钉发送消息。


详情


返回定时任务的任务ID。如果jobId与已有的定时任务的ID不一致,系统返回jobId。否则在jobId后面添加当前日期,"000",“001”等作为后缀,直到产生唯一的任务ID。我们可以使用getRecentJobs来查看最近完成的定时任务。


执行定时任务生成的信息保存在 jodId.msg 文件中;如果定时任务会返回值,它会保存在 jobId.object 文件中。jobId.msg jobId.object 保存在batchIobs文件夹中。我们可以分别使用getJobMessagegetJobRetrn来查看这两个文件。


例子


定时执行一个函数:



def f():1+2;


scheduleJob(jobId=`daily, jobDesc="Daily Job 1", jobFunc=f, scheduleTime=17:23m, startDate=2018.01.01, endDate=2018.12.31, frequency='D');


scheduleJob(jobId=`weekly, jobDesc="Weekly Job", jobFunc=f, scheduleTime=17:30m, startDate=2018.01.01, endDate=2018.12.31, frequency='W', days=2);



定时执行一个脚本:



scheduleJob(jobId=`monthly, jobDesc="Monthly Job 1", jobFunc=run{"monthlyJob.dos"}, scheduleTime=17:23m, startDate=2018.01.01, endDate=2018.12.31, frequency='M', days=1);



这里使用部分应用run{<script>},因为jobFunc必须是没有参数的函数。



>getJobMessage(`daily);

2018-02-08 17:23:27.166296 Start the job [daily]: Daily Job 1

2018-02-08 17:23:27.167303 The job is done.


>getJobReturn(`daily);

3



可以在一天中多次定时执行相同的任务:



scheduleJob(jobId=`Trading, jobDesc="Generate Trading Tickets", jobFunc=run{"TradingTickets.dos"}, scheduleTime=[09:25m, 12:00m, 02:00m, 15:50m], startDate=2018.01.01, endDate=2018.12.31, frequency='D');



在这种情况下,每次执行定时任务时,任务ID是不一样的。


可以在每周的工作日中多次执行相同的定时任务:



scheduleJob(jobId=`PnL, jobDesc="Calculate Profit & Loss", jobFunc=run{"PnL.dos"}, scheduleTime=[12:00m, 02:00m, 14:50m], startDate=2018.01.01, endDate=2018.12.31, frequency='W', days=[1,2,3,4,5]);



定时任务执行结束后可发送邮件通知。以下脚本运行前需安装HttpClient插件



def sendEmail(jobId, jobDesc, success, result){

   desc = "jobId=" + jobId + " jobDesc=" + jobDesc

   if(success){

   desc += " successful " + result

       res = httpClient::sendEmail('patrick.mahomes@dolphindb.com','password','andy.reid@dolphindb.com','This is a subject',desc)

   }

   else{

   desc += " with error: " + result

       res = httpClient::sendEmail('patrick.mahomes@dolphindb.com','password','andy.reid@dolphindb.com','This is a subject',desc)

   }

}

scheduleJob(jobId=`PnL, jobDesc="Calculate Profit & Loss", jobFunc=run{"PnL.dos"}, scheduleTime=[12:00m, 02:00m, 14:50m], startDate=2018.01.01, endDate=2018.12.31, frequency='W', days=[1,2,3,4,5], onComplete=sendEmail);