/// <summary> /// 上报任务调度状态 /// </summary> /// <param name="taskid"></param> /// <param name="taskversionid"></param> /// <param name="status"></param> private void UploadStatus(string taskid, string taskversionid, TaskScheduleStatus status, string nextruntime = "") { var req2 = new UpdateTaskScheduleStatusRequest() { NodeId = GlobalNodeConfig.NodeID, Source = Source.Node, ScheduleStatus = status, TaskId = int.Parse(taskid), TaskVersionId = int.Parse(taskversionid), NextRunTime = nextruntime }; var r3 = NodeProxy.PostToServer <EmptyResponse, UpdateTaskScheduleStatusRequest>(ProxyUrl.UpdateTaskScheduleStatus_Url, req2); if (r3.Status != ResponesStatus.Success) { ShowCommandLog("更新任务调度状态(" + status.description() + ")失败,请求Url:" + ProxyUrl.UpdateTaskScheduleStatus_Url + ",请求参数:" + JsonConvert.SerializeObject(req2) + ",返回参数:" + JsonConvert.SerializeObject(r3)); } }
private void UploadLocalTask(List <int> taskidnotserver) { taskidnotserver.ForEach(x => { var taskruntimeInfo = TaskPoolManager.CreateInstance().Get(x.ToString()); //上报所在在本地节点运行的任务,但是在服务端未在调度中,更新服务端的任务调度状态为调度中 var req2 = new UpdateTaskScheduleStatusRequest() { NodeId = GlobalNodeConfig.NodeID, Source = Source.Node, ScheduleStatus = TaskScheduleStatus.Scheduling, TaskId = x, TaskVersionId = taskruntimeInfo.TaskVersionModel.id, NextRunTime = Convert.ToString(taskruntimeInfo.TaskModel.nextruntime) }; var r3 = NodeProxy.PostToServer <EmptyResponse, UpdateTaskScheduleStatusRequest>(ProxyUrl.UpdateTaskScheduleStatus_Url, req2); if (r3.Status != ResponesStatus.Success) { LogProxy.AddNodeErrorLog("任务id:" + x.ToString() + ",任务名称:" + taskruntimeInfo.TaskModel.taskname + ",在服务端为停止调度状态,在本地节点下为调度中。上报本地节点下的任务状态(调度中)失败"); // ShowCommandLog("更新任务调度状态(" + status.description() + ")失败,请求Url:" + ProxyUrl.UpdateTaskScheduleStatus_Url + ",请求参数:" + JsonConvert.SerializeObject(req2) + ",返回参数:" + JsonConvert.SerializeObject(r3)); } }); }
/// <summary> /// 执行 /// </summary> public override RunCommandResult Execute() { try { string taskid = CommandQueue.taskid.ToString(); int taskversionid = CommandQueue.taskversionid; var taskruntimeinfo = TaskPoolManager.CreateInstance().Get(taskid.ToString()); if (taskruntimeinfo == null) { ShowCommandLog("任务不在运行中"); //return new RunCommandResult() { RunStatus = CommandRunStatus.Normal }; } else { var r = TaskDisposer.DisposeTask(CommandQueue.taskid, taskruntimeinfo, false, ShowCommandLog); } //上报任务已停止日志,并更新任务执行状态和调度状态(待调度) var req = new UpdateTaskScheduleStatusRequest() { NodeId = GlobalNodeConfig.NodeID, Source = Source.Node, ScheduleStatus = Model.enums.TaskScheduleStatus.StopSchedule, TaskId = int.Parse(taskid), TaskVersionId = taskversionid }; var r2 = NodeProxy.PostToServer <EmptyResponse, UpdateTaskScheduleStatusRequest>(ProxyUrl.UpdateTaskScheduleStatus_Url, req); if (r2.Status != ResponesStatus.Success) { ShowCommandLog("更新任务调度状态(停止调度)失败,请求Url:" + ProxyUrl.UpdateTaskScheduleStatus_Url + ",请求参数:" + JsonConvert.SerializeObject(req) + ",返回参数:" + JsonConvert.SerializeObject(r2)); } return(new RunCommandResult() { ExecuteStatus = ExecuteStatus.ExecuteSucess }); } catch (Exception ex) { ShowCommandLog("停止执行节点任务失败,异常信息:" + JsonConvert.SerializeObject(ex)); return(new RunCommandResult() { ExecuteStatus = ExecuteStatus.ExecuteException, Ex = ex, Message = ex.Message }); } }
public override Model.RunCommandResult Execute() { try { string taskid = CommandQueue.taskid.ToString(); var taskruntimeinfo = TaskPoolManager.CreateInstance().Get(taskid.ToString()); if (taskruntimeinfo == null) { ShowCommandLog("当前任务不存在于本地节点中,恢复任务调度失败"); return(new Model.RunCommandResult() { ExecuteStatus = ExecuteStatus.ExecuteFailed, Message = "当前任务不存在于本地节点中,暂停任务失败" }); } TaskPoolManager.CreateInstance().UpdateTaskSchduleStatus(taskid, TaskScheduleStatus.RecoverSchedule); var req = new UpdateTaskScheduleStatusRequest() { NodeId = GlobalNodeConfig.NodeID, Source = Source.Node, ScheduleStatus = Model.enums.TaskScheduleStatus.RecoverSchedule, TaskId = int.Parse(taskid), TaskVersionId = taskruntimeinfo.TaskVersionModel.id }; var r2 = NodeProxy.PostToServer <EmptyResponse, UpdateTaskScheduleStatusRequest>(ProxyUrl.UpdateTaskScheduleStatus_Url, req); if (r2.Status != ResponesStatus.Success) { ShowCommandLog("更新任务调度状态(恢复调度)失败,请求Url:" + ProxyUrl.UpdateTaskScheduleStatus_Url + ",请求参数:" + JsonConvert.SerializeObject(req) + ",返回参数:" + JsonConvert.SerializeObject(r2)); } return(new Model.RunCommandResult() { ExecuteStatus = ExecuteStatus.ExecuteSucess }); } catch (Exception ex) { return(new Model.RunCommandResult() { ExecuteStatus = ExecuteStatus.ExecuteException, Message = ex.Message, Ex = ex }); } }
public ResponseBase <EmptyResponse> UpdateTaskScheduleStatus(UpdateTaskScheduleStatusRequest req) { var taskversion = taskrep.FindSingle(x => x.id == req.TaskId); if (taskversion == null) { return(ResponseToClient <EmptyResponse>(ResponesStatus.Failed, "未找到该任务版本号对应的信息")); } taskversion.taskschedulestatus = (int)req.ScheduleStatus; if (req.ScheduleStatus == TaskScheduleStatus.PauseSchedule) { taskversion.ispauseschedule = 1; } if (req.ScheduleStatus == TaskScheduleStatus.RecoverSchedule) { taskversion.ispauseschedule = 0; taskversion.taskschedulestatus = (int)TaskScheduleStatus.Scheduling; } taskversion.nextruntime = string.IsNullOrEmpty(req.NextRunTime) ? taskversion.nextruntime : Convert.ToDateTime(req.NextRunTime); taskrep.Update(taskversion); return(ResponseToClient <EmptyResponse>(ResponesStatus.Success, "")); }
public void Execute(JobExecutionContext context) { //lock (lockobj) //{ int taskid = Convert.ToInt32(context.JobDetail.Name); try { var taskruntimeinfo = TaskPoolManager.CreateInstance().Get(taskid.ToString()); taskruntimeinfo.DllTask.ClearLog(); if (taskruntimeinfo == null || taskruntimeinfo.DllTask == null) { // LogHelper.AddTaskError("当前任务信息为空引用", taskid, new Exception()); return; } taskruntimeinfo.TaskLock.Invoke(() => { // int runCount = 0; try { int taskid2 = taskruntimeinfo.TaskModel.id; int taskversionid = taskruntimeinfo.TaskVersionModel.id; string nextrunTime = Convert.ToDateTime(context.NextFireTimeUtc).ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss"); nextrunTime = nextrunTime.IndexOf("0001-01") > -1 ? "2099-12-30" : nextrunTime; if (taskruntimeinfo.TaskModel.ispauseschedule == 0) //等于0 说明没有停止调度,否则停止调度 { taskruntimeinfo.DllTask.TryRunTask(nextrunTime, taskruntimeinfo); //执行完,判断是否需要释放 try { if (taskruntimeinfo.TaskModel.tasktype == (int)TaskType.OnceTask) { bool disposeflag = TaskDisposer.DisposeTask(taskid2, taskruntimeinfo, false, null); if (disposeflag) //如果释放成功则上报 { var req = new UpdateTaskScheduleStatusRequest() { NodeId = GlobalNodeConfig.NodeID, Source = Source.Node, ScheduleStatus = Model.enums.TaskScheduleStatus.StopSchedule, TaskId = taskid2, TaskVersionId = taskversionid }; var r2 = NodeProxy.PostToServer <EmptyResponse, UpdateTaskScheduleStatusRequest>(ProxyUrl.UpdateTaskScheduleStatus_Url, req); if (r2.Status != ResponesStatus.Success) { LogProxy.AddTaskErrorLog("更新任务调度状态(停止调度)失败,请求Url:" + ProxyUrl.UpdateTaskScheduleStatus_Url + ",请求参数:" + JsonConvert.SerializeObject(req) + ",返回参数:" + JsonConvert.SerializeObject(r2), taskid); } } else { LogProxy.AddTaskErrorLog("taskid=" + taskid + ",释放单次执行任务资源失败", taskid); } } } catch (Exception ex) { LogProxy.AddTaskErrorLog("taskid=" + taskid + ",释放单次执行任务资源异常:" + JsonConvert.SerializeObject(ex), taskid); } } } catch (Exception exp) { LogProxy.AddTaskErrorLog("任务:" + taskid + ",TaskJob回调时执行异常,异常信息:" + JsonConvert.SerializeObject(exp), taskid); } }); } catch (Exception exp) { LogProxy.AddTaskErrorLog("任务调度组件回调时发生严重异常,异常信息:" + JsonConvert.SerializeObject(exp), taskid); } }