Exemple #1
0
 public static void DoTask(CancellationTokenSource tokenSource)
 {
     Task.Factory.StartNew(() =>
     {
         while (!tokenSource.IsCancellationRequested)
         {
             while (true)
             {
                 try
                 {
                     GlobalVariable.modeLock.EnterReadLock();
                     if (GlobalVariable.mode == "auto")
                     {
                         break;
                     }
                 }
                 finally
                 {
                     GlobalVariable.modeLock.ExitReadLock();
                 }
                 Thread.Sleep(1000 * 5);
             }
             //获得服务集合
             var serviceControllers = ServiceController.GetServices();
             var stopAll            = serviceControllers.Where(x => x.Status == ServiceControllerStatus.Stopped);
             Parallel.ForEach(stopAll, x =>
             {
                 if (!Confs.ContainsKey(x.ServiceName))
                 {
                     return;
                 }
                 try
                 {
                     Log.InfoFormat("检测到服务:{0} 描述:{1} 已停止,正在重启", x.ServiceName, Confs[x.ServiceName]);
                     var st = Stopwatch.StartNew();
                     x.Start();
                     x.WaitForStatus(ServiceControllerStatus.Running);
                     st.Stop();
                     Log.InfoFormat("服务:{0} 描述:{1} 重启成功,耗时:{2}", x.ServiceName, Confs[x.ServiceName], st.ElapsedMilliseconds);
                 }
                 catch (InvalidOperationException exception)
                 {
                     Log.Fatal(string.Format("已知错误 服务:{0} 重启失败!", x.ServiceName), exception);
                 }
                 catch (Exception exception)
                 {
                     Log.Fatal(string.Format("未知错误 服务:{0} 重启失败!", x.ServiceName), exception);
                 }
             });
             Thread.Sleep(new TimeSpan(0, 1, 0));
         }
     });
 }
 public void Execute(IJobExecutionContext context)
 {
     foreach (var item in Confs)
     {
         var service = new ServiceController(item.Key);
         try
         {
             log.InfoFormat("{0}服务执行重启,描述:{1} 正在重启", item.Key, Confs[item.Key]);
             var st = Stopwatch.StartNew();
             if (service.Status == ServiceControllerStatus.Running)
             {
                 service.Stop();
                 service.WaitForStatus(ServiceControllerStatus.Stopped);
             }
             service.Start();
             service.WaitForStatus(ServiceControllerStatus.Running);
             st.Stop();
             log.InfoFormat("服务:{0} 描述:{1} 重启成功,耗时:{2}", item.Key, Confs[item.Key], st.ElapsedMilliseconds);
         }
         catch (Exception exception)
         {
             log.Fatal(string.Format("重启服务:{0} 重启失败!", item.Key), exception);
         }
         finally
         {
             service.Close();
         }
     }
 }
 /// <summary>
 ///     服务启动
 /// </summary>
 public void Start()
 {
     try
     {
         ////从工厂中获取一个调度器实例化
         //var scheduler = StdSchedulerFactory.GetDefaultScheduler();
         //scheduler.Start(); //开启调度器
         MqListenerManger.StartListener(TokenSource);
         //c# 6.0 using static class
         ServerStateTask.DoTask(TokenSource);
         ServerStateTask.DoStateTask(TokenSource) /* 服务状态 */;
         _hostService.Opened += delegate { Log.Info("hostService服务 启动中."); };
         _hostService.Open();
     }
     catch (Exception e)
     {
         Log.Fatal(e.Message, e);
     }
 }