---
source_url: https://docs.dolphindb.cn/zh/funcs/s/scheduleJob.html
fetched_at: 2026-05-19T09:38:00Z
category: funcs
title: scheduleJob
sha1: d05dd1d4ab1250aacb51ab643f267df7b4579f98
---

# scheduleJob

## 语法

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

## 详情

提交定时任务。我们可以使用 [getRecentJobs](../g/getRecentJobs.html) 来查看最近完成的定时任务。

执行定时任务生成的信息保存在 jodId.msg 文件中；如果定时任务会返回值，它会保存在 jobId.object 文件中。
jobId.msg 和 jobId.object 保存在 batchIobs 文件夹中。我们可以分别使用 [getJobMessage](../g/getJobMessage.html) 和 [getJobReturn](../g/getJobReturn.html) 来查看这两个文件。

## 参数

**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个参数的回调函数，细节请见以下最后一个例子。当定时作业执行完毕（包括有异常的情况）后，会执行该函数。可通过该函数向外部消息系统如邮件系统或微信与钉钉发送消息。

**priority** 属于 0 到 8 的整数，表示任务的优先级。默认值为 4。

**parallelism** 属于 0 到 8 的整数，表示任务的并行度。默认值为 2。

注：用户设置的优先级和并行度，还分别受到 [setMaxJobPriority](setMaxJobPriority.html) 的参数 *maxPriority* 和 [setMaxJobParallelism](setMaxJobParallelism.html) 的参数
*maxParallelism* 限制。最终的优先级和并行度分别为 min(*priority*, *maxPriority*),
min(*parallelism*, *maxParallelism*)。

## 返回值

返回定时任务的任务 ID。如果 *jobId* 与已有的定时任务的 ID 不一致，系统返回 *jobId*。否则在 *jobId*
后面添加当前日期，"000", "001" 等作为后缀，直到产生唯一的任务 ID。

## 例子

定时执行一个函数：

```dolphindb
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);
```

定时执行一个脚本：

```dolphindb
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* 必须是没有参数的函数。

```dolphindb
getJobMessage(`daily);
// output
018-02-08 17:23:27.166296 Start the job [daily]: Daily Job 1
018-02-08 17:23:27.167303 The job is done.

getJobReturn(`daily);
// output
3
```

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

```dolphindb
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 是不一样的。

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

```dolphindb
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 插件。

```dolphindb
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);
```
