diff --git a/AntJob.Data/Ant.htm b/AntJob.Data/Ant.htm
index 96dd887..9d0c46c 100644
--- a/AntJob.Data/Ant.htm
+++ b/AntJob.Data/Ant.htm
@@ -911,7 +911,7 @@
<td></td>
<td></td>
<td>N</td>
- <td>任务项保留天数,超过天数的任务项将被删除,默认3天</td>
+ <td>任务项保留天数,超过天数的任务项将被删除,默认30天</td>
</tr>
<tr>
diff --git "a/AntJob.Data/Entity/\344\275\234\344\270\232.Biz.cs" "b/AntJob.Data/Entity/\344\275\234\344\270\232.Biz.cs"
index 84ed542..33294d3 100644
--- "a/AntJob.Data/Entity/\344\275\234\344\270\232.Biz.cs"
+++ "b/AntJob.Data/Entity/\344\275\234\344\270\232.Biz.cs"
@@ -40,12 +40,12 @@ public partial class Job : EntityBase<Job>
// 参数默认值
var step = Step;
if (step == 0) step = Step = 5;
- if (MaxRetain == 0) MaxRetain = 3;
+ if (MaxRetain == 0) MaxRetain = 30;
if (MaxIdle == 0) MaxIdle = GetDefaultIdle();
if (isNew)
{
- if (!Dirtys[nameof(MaxRetry)]) MaxRetry = 10;
+ if (!Dirtys[nameof(MaxRetry)]) MaxRetry = 100;
if (!Dirtys[nameof(MaxTime)]) MaxTime = 600;
if (!Dirtys[nameof(ErrorDelay)]) ErrorDelay = 60;
if (!Dirtys[nameof(MaxIdle)]) MaxIdle = GetDefaultIdle();
diff --git "a/AntJob.Data/Entity/\344\275\234\344\270\232.cs" "b/AntJob.Data/Entity/\344\275\234\344\270\232.cs"
index 7ccda42..e042586 100644
--- "a/AntJob.Data/Entity/\344\275\234\344\270\232.cs"
+++ "b/AntJob.Data/Entity/\344\275\234\344\270\232.cs"
@@ -179,12 +179,12 @@ public partial class Job
public Int32 MaxTime { get => _MaxTime; set { if (OnPropertyChanging("MaxTime", value)) { _MaxTime = value; OnPropertyChanged("MaxTime"); } } }
private Int32 _MaxRetain;
- /// <summary>保留。任务项保留天数,超过天数的任务项将被删除,默认3天</summary>
+ /// <summary>保留。任务项保留天数,超过天数的任务项将被删除,默认30天</summary>
[Category("控制参数")]
[DisplayName("保留")]
- [Description("保留。任务项保留天数,超过天数的任务项将被删除,默认3天")]
+ [Description("保留。任务项保留天数,超过天数的任务项将被删除,默认30天")]
[DataObjectField(false, false, false, 0)]
- [BindColumn("MaxRetain", "保留。任务项保留天数,超过天数的任务项将被删除,默认3天", "")]
+ [BindColumn("MaxRetain", "保留。任务项保留天数,超过天数的任务项将被删除,默认30天", "")]
public Int32 MaxRetain { get => _MaxRetain; set { if (OnPropertyChanging("MaxRetain", value)) { _MaxRetain = value; OnPropertyChanged("MaxRetain"); } } }
private Int32 _MaxIdle;
@@ -539,7 +539,7 @@ public partial class Job
/// <summary>最大执行时间。默认600秒,超过该时间则认为执行器故障,将会把该任务分配给其它执行器</summary>
public static readonly Field MaxTime = FindByName("MaxTime");
- /// <summary>保留。任务项保留天数,超过天数的任务项将被删除,默认3天</summary>
+ /// <summary>保留。任务项保留天数,超过天数的任务项将被删除,默认30天</summary>
public static readonly Field MaxRetain = FindByName("MaxRetain");
/// <summary>最大空闲时间。默认3600秒,超过该时间不更新则认为应用程序故障,系统触发告警</summary>
@@ -665,7 +665,7 @@ public partial class Job
/// <summary>最大执行时间。默认600秒,超过该时间则认为执行器故障,将会把该任务分配给其它执行器</summary>
public const String MaxTime = "MaxTime";
- /// <summary>保留。任务项保留天数,超过天数的任务项将被删除,默认3天</summary>
+ /// <summary>保留。任务项保留天数,超过天数的任务项将被删除,默认30天</summary>
public const String MaxRetain = "MaxRetain";
/// <summary>最大空闲时间。默认3600秒,超过该时间不更新则认为应用程序故障,系统触发告警</summary>
diff --git "a/AntJob.Data/Entity/\344\275\234\344\270\232\344\273\273\345\212\241.Biz.cs" "b/AntJob.Data/Entity/\344\275\234\344\270\232\344\273\273\345\212\241.Biz.cs"
index 2260311..3b4aaa5 100644
--- "a/AntJob.Data/Entity/\344\275\234\344\270\232\344\273\273\345\212\241.Biz.cs"
+++ "b/AntJob.Data/Entity/\344\275\234\344\270\232\344\273\273\345\212\241.Biz.cs"
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using NewLife;
@@ -160,13 +160,14 @@ public partial class JobTask : EntityBase<JobTask>
/// <summary>获取该任务下特定状态的任务项</summary>
/// <param name="taskid"></param>
+ /// <param name="start"></param>
/// <param name="end"></param>
/// <param name="maxRetry"></param>
/// <param name="maxError"></param>
/// <param name="status"></param>
/// <param name="count">要申请的任务个数</param>
/// <returns></returns>
- public static IList<JobTask> Search(Int32 taskid, DateTime end, Int32 maxRetry, Int32 maxError, JobStatus[] status, Int32 count)
+ public static IList<JobTask> Search(Int32 taskid, DateTime start, DateTime end, Int32 maxRetry, Int32 maxError, JobStatus[] status, Int32 count)
{
var exp = new WhereExpression();
if (taskid > 0) exp &= _.JobID == taskid;
@@ -176,8 +177,8 @@ public partial class JobTask : EntityBase<JobTask>
// 限制任务的错误次数,避免无限执行
if (maxError > 0) exp &= _.Error < maxError;
- exp &= _.UpdateTime >= DateTime.Now.AddDays(-7);
- if (end > DateTime.MinValue) exp &= _.UpdateTime < end;
+ if (start.Year > 2000) exp &= _.UpdateTime >= start;
+ if (end.Year > 2000) exp &= _.UpdateTime < end;
return FindAll(exp, _.ID.Asc(), null, 0, count);
}
diff --git a/AntJob.Data/Model.xml b/AntJob.Data/Model.xml
index 7b0ad3b..a17db16 100644
--- a/AntJob.Data/Model.xml
+++ b/AntJob.Data/Model.xml
@@ -137,7 +137,7 @@
<Column Name="MaxError" DataType="Int32" Description="最大错误。连续错误达到最大错误数时停止" Category="控制参数" />
<Column Name="MaxRetry" DataType="Int32" Description="最大重试。默认10次,超过该次数后将不再重试" Category="控制参数" />
<Column Name="MaxTime" DataType="Int32" Description="最大执行时间。默认600秒,超过该时间则认为执行器故障,将会把该任务分配给其它执行器" Category="控制参数" />
- <Column Name="MaxRetain" DataType="Int32" Description="保留。任务项保留天数,超过天数的任务项将被删除,默认3天" Category="控制参数" />
+ <Column Name="MaxRetain" DataType="Int32" Description="保留。任务项保留天数,超过天数的任务项将被删除,默认30天" Category="控制参数" />
<Column Name="MaxIdle" DataType="Int32" Description="最大空闲时间。默认3600秒,超过该时间不更新则认为应用程序故障,系统触发告警" Category="控制参数" />
<Column Name="ErrorDelay" DataType="Int32" Description="错误延迟。默认60秒,出错延迟后重新发放" Category="控制参数" />
<Column Name="Deadline" DataType="DateTime" Description="最后期限。超过该时间后,任务将不再执行" Category="控制参数" />
diff --git a/AntJob.Server/Services/JobService.cs b/AntJob.Server/Services/JobService.cs
index 023cf9b..5296305 100644
--- a/AntJob.Server/Services/JobService.cs
+++ b/AntJob.Server/Services/JobService.cs
@@ -529,7 +529,7 @@ public class JobService(AppService appService, ICacheProvider cacheProvider, ITr
private void CheckMaxError(App app, Job job)
{
// 出错时判断如果超过最大错误数,则停止作业
- var maxError = job.MaxError < 1 ? 100 : job.MaxError;
+ var maxError = job.MaxError <= 0 ? 100 : job.MaxError;
if (job.Enable && job.Error > maxError)
{
job.MaxError = maxError;
@@ -695,8 +695,9 @@ public class JobService(AppService appService, ICacheProvider cacheProvider, ITr
using var ts = Job.Meta.CreateTrans();
- var dt = DateTime.Now;
- var list = JobTask.Search(job.ID, dt, job.MaxRetry, 32, [JobStatus.取消, JobStatus.延迟], count);
+ var now = DateTime.Now;
+ var maxError = job.MaxError - job.Error;
+ var list = JobTask.Search(job.ID, now.AddDays(-7), now, job.MaxRetry, maxError, [JobStatus.取消, JobStatus.延迟], count);
foreach (var task in list)
{
task.Server = server;
@@ -730,19 +731,22 @@ public class JobService(AppService appService, ICacheProvider cacheProvider, ITr
using var ts = Job.Meta.CreateTrans();
var list = new List<JobTask>();
+ var now = DateTime.Now;
+ var maxError = job.MaxError - job.Error;
+
// 查找历史错误任务
if (job.ErrorDelay > 0)
{
- var dt = DateTime.Now.AddSeconds(-job.ErrorDelay);
- var list2 = JobTask.Search(job.ID, dt, job.MaxRetry, 32, [JobStatus.错误], count);
+ var end = now.AddSeconds(-job.ErrorDelay);
+ var list2 = JobTask.Search(job.ID, now.AddDays(-7), end, job.MaxRetry, maxError, [JobStatus.错误], count);
if (list2.Count > 0) list.AddRange(list2);
}
// 查找历史中断任务,持续10分钟仍然未完成
if (job.MaxTime > 0 && list.Count < count)
{
- var dt = DateTime.Now.AddSeconds(-job.MaxTime);
- var list2 = JobTask.Search(job.ID, dt, job.MaxRetry, 32, [JobStatus.就绪, JobStatus.抽取中, JobStatus.处理中], count - list.Count);
+ var end = now.AddSeconds(-job.MaxTime);
+ var list2 = JobTask.Search(job.ID, now.AddDays(-7), end, job.MaxRetry, maxError, [JobStatus.就绪, JobStatus.抽取中, JobStatus.处理中], count - list.Count);
if (list2.Count > 0) list.AddRange(list2);
}
if (list.Count > 0)