Esempio n. 1
0
 /// <summary>
 ///     停止所有执行任务,并清空执行状态表
 /// </summary>
 public void StopAllTask()
 {
     foreach (var context in AppDomainContextDic.Values)
     {
         RemoteAction.Invoke(context.Domain, () => { SchedulerContainer.GetContainerInstance().StopSchedule(); });
     }
     _taskRunLogRespository.ClearTaskRunLog(); // 清空执行状态表
 }
Esempio n. 2
0
        /// <summary>
        ///     开始所有执行的任务,并且结合配置执行状态表数据
        /// </summary>
        public void StartAllScheduler()
        {
            GetUseableJobconfigs(); //读取任务配置
            foreach (var configs in ConfigDic.Values)
            {
                foreach (var config in configs)
                {
                    var runlog = new TaskRunLog
                    {
                        Pcip            = Computer.IpAddress,
                        Pcmac           = Computer.MacAddress,
                        Pcname          = Computer.ComputerName,
                        Taskid          = config.Taskid,
                        Taskname        = config.Taskname,
                        Taskremark      = config.TaskRemark,
                        Taskserverid    = _runnerConfig.TaskServerId,
                        Taskstatus      = 0,
                        Tasknextruntime = DateTime.Now,
                        Tasklastruntime = DateTime.Now
                    };
                    _taskRunLogRespository.SaveTaskRunLog(runlog);
                }
            }

            #region 根据模块创建新的appdomain,并开始任务

            foreach (var config in ConfigDic)
            {
                var setup = new AppDomainSetup
                {
                    ApplicationName = $"JobLoader_{config.Key}",
                    ApplicationBase = FileHelper.GetRootPath(),
                    PrivateBinPath  = "ZilLionTask",
                    CachePath       = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "JobCachePath"),
                    ShadowCopyFiles = "true"
                };
                setup.ShadowCopyDirectories = string.Concat(setup.ApplicationBase, ";", setup.PrivateBinPath);

                var remoteDomain = AppDomain.CreateDomain($"{config.Key}Domain_{Guid.NewGuid():N}", null, setup);
                var context      = AppDomainContext.Wrap(remoteDomain);
                if (!AppDomainContextDic.ContainsKey(config.Key))
                {
                    AppDomainContextDic.Add(config.Key, context);
                }

                RemoteAction.Invoke(context.Domain, config.Key, config.Value, _runnerConfig, (k, v, runnerconfig) =>
                {
                    var container = SchedulerContainer.GetContainerInstance();
                    container.InitScheduler(k, v, runnerconfig);
                    container.StartScheduler();
                });
            }

            #endregion
        }
Esempio n. 3
0
        /// <summary>
        ///     根据ID立即执行
        /// </summary>
        /// <param name="config"></param>
        public void RunOnceTaskById(TaskConfig config)
        {
            if (!AppDomainContextDic.ContainsKey(config.TaskModule))
            {
                return;
            }
            var context = AppDomainContextDic[config.TaskModule];

            RemoteAction.Invoke(context.Domain, config.Taskid,
                                taskid => { SchedulerContainer.GetContainerInstance().RunOnceTask(taskid); });
            var runlog = _taskRunLogRespository.GetTaskRunLogById(config.Taskid);

            runlog.Tasklastruntime = DateTime.Now;
            _taskRunLogRespository.SaveTaskRunLog(runlog);
        }
Esempio n. 4
0
        /// <summary>
        ///     删除指定id任务
        /// </summary>
        /// <param name="config"></param>
        public void DeleteById(TaskConfig config)
        {
            if (!AppDomainContextDic.ContainsKey(config.TaskModule))
            {
                return;
            }
            var context = AppDomainContextDic[config.TaskModule];

            RemoteAction.Invoke(context.Domain, config.Taskid,
                                taskid => { SchedulerContainer.GetContainerInstance().DeleteJob(taskid); });
            config.IsDeleted = 1;
            _taskConfigRespository.SaveData(config);
            var runlog = _taskRunLogRespository.GetTaskRunLogById(config.Taskid);

            _taskRunLogRespository.RemoveTaskRunLog(runlog);
        }