public SwiftProcess(string method, JobBase job, Process process) { _method = method; switch (_method) { case "SplitJob": _timeout = job.JobSplitTimeout; break; case "CollectTaskResult": _timeout = job.TaskResultCollectTimeout; break; default: _timeout = 0; break; } _job = job; _businessId = job.BusinessId; _eventActions = null; _process = process; _jobTask.Process = this; _filePath = SwiftConfiguration.GetSwiftProcessPath(_method, _businessId); _job.RelateProcess(method, this); }
public SwiftProcess(string method, JobTask task, Process process) { _method = method; _jobTask = task; _timeout = _jobTask.ExecuteTimeout; _job = task.Job; _businessId = task.BusinessId; _eventActions = null; _process = process; _jobTask.Process = this; _filePath = SwiftConfiguration.GetSwiftProcessPath(_method, _businessId); }
/// <summary> /// 移除进程文件 /// </summary> public void RemoveProcessFile() { try { var processFilePath = SwiftConfiguration.GetSwiftProcessPath("ExecuteTask", BusinessId); File.Delete(processFilePath); LogWriter.Write("has remove task execute process file"); } catch (Exception ex) { LogWriter.Write("remove task execute process file go exception", ex); } }
/// <summary> /// 创建进程文件 /// </summary> public void CreateProcessFile() { var processDirPath = SwiftConfiguration.AllSwiftProcessRootPath; if (!Directory.Exists(processDirPath)) { Directory.CreateDirectory(processDirPath); } // 在进程内部记录进程Id,方便跟踪Swift启动的进程 var processFilePath = SwiftConfiguration.GetSwiftProcessPath("ExecuteTask", BusinessId); File.WriteAllText(processFilePath, Process.Id.ToString()); }
/// <summary> /// 获取进程Id /// </summary> /// <returns>The process identifier.</returns> public int GetProcessId(CancellationToken cancellationToken = default(CancellationToken)) { cancellationToken.ThrowIfCancellationRequested(); int processId = -1; var processFilePath = SwiftConfiguration.GetSwiftProcessPath("ExecuteTask", BusinessId); if (File.Exists(processFilePath)) { processId = int.Parse(File.ReadAllTextAsync(processFilePath, cancellationToken).Result); } return(processId); }
/// <summary> /// Kills the abandoned collect task result process. /// </summary> /// <param name="processId">Process identifier.</param> /// <param name="jobName">Job name.</param> /// <param name="jobId">Job identifier.</param> public static void KillAbandonedCollectTaskResultProcess(int processId, string jobName, string jobId) { var businessId = JobBase.FormatBusinessId(jobName, jobId); Process osProcess = null; try { osProcess = Process.GetProcessById(processId); } catch (Exception ex) { LogWriter.Write(string.Format("根据进程Id查找进程异常,进程可能已经关闭了:{0},{1}", businessId, processId), ex, LogLevel.Info); } bool canDeleteProcessFile = true; if (osProcess != null) { if (SwiftProcess.CheckJobAndProcessMatch(osProcess, jobName, jobId, "CollectTaskResult")) { try { osProcess.Kill(); osProcess.WaitForExit(); LogWriter.Write(string.Format("已关闭废弃的任务合并进程:{0},{1}", businessId, processId), LogLevel.Info); } catch (Exception ex) { canDeleteProcessFile = false; LogWriter.Write(string.Format("关闭废弃的任务合并进程异常:{0},{1}", businessId, processId), ex, LogLevel.Error); } } } if (canDeleteProcessFile) { var processPath = SwiftConfiguration.GetSwiftProcessPath("CollectTaskResult", JobBase.FormatBusinessId(jobName, jobId)); try { File.Delete(processPath); LogWriter.Write(string.Format("进程文件已删除:{0}", processPath), LogLevel.Info); } catch (Exception ex) { LogWriter.Write(string.Format("删除废弃的任务合并进程文件异常:{0},{1}", businessId, processId), ex, LogLevel.Error); } } }