scheduleJob

语法

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

参数

jobId 是一个字符串。

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

jobFunc 是一个没有参数的函数。它通常是一个部分应用。注意:若该函数是一个自定义函数,则它只能接收标量、数据对或常规数组作为默认参数。

scheduleTime 是一个MINUTE类型的标量/向量。任务之间的时间间隔最小为5分钟。

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 文件夹中。我们可以分别使用 getJobMessagegetJobReturn 来查看这两个文件。

例子

定时执行一个函数:

$ 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);