Esempio n. 1
0
        public void TestService()
        {
            ServiceManger sm = new ServiceManger();

            Console.WriteLine(sm.GetServiceValue("Nurse.Master", "State"));
            ////var state = sm.GetServiceValue("HXHSImportFile", "State");
            //if (sm.GetServiceValue("HXHSImportFile", "State").ToString() == ServiceState.Stopped)
            //{
            //    sm.StartService("HXHSImportFile");
            //    Console.WriteLine("开启服务");
            //    Thread.Sleep(1000);
            //    if (sm.GetServiceValue("HXHSImportFile", "State").ToString() == ServiceState.Running)
            //    {

            //        Console.WriteLine("开启成功");
            //    }
            //}
            //else
            //{
            //    sm.StopService("HXHSImportFile");
            //    Console.WriteLine("停止服务");

            //}
            //Console.WriteLine(state);
        }
Esempio n. 2
0
 /// <summary>
 /// 关闭服务
 /// </summary>
 /// <param name="node"></param>
 private void CloseNode(ConfigNode node)
 {
     if (node.AppType == (int)Enums.EnumAppType.可执行程序)
     {
         if (ProcessHelper.ExistProcess(node.AppName))
         {
             Log.Info("停掉进程:" + node.AppName);
             ProcessHelper.CloseProcess(node.AppName);
         }
         else
         {
             Log.Info("进程:" + node.AppName + " 本停止,不做操作");
         }
     }
     else
     {
         ServiceManger sm = new ServiceManger();
         if (sm.GetServiceValue(node.AppName, "State").ToString().Equals(ServiceState.Running))
         {
             //先停止服务
             sm.StopService(node.AppName);
             Log.Info("关闭服务:" + node.AppName + "  ...");
             Thread.Sleep(500);
             if (sm.GetServiceValue(node.AppName, "State").ToString().Equals(ServiceState.Stopped))
             {
                 Log.Info("关闭服务成功:" + node.AppName);
             }
             else
             {
                 Log.Error("关闭服务失败:" + node.AppName);
             }
         }
         else
         {
             Log.Info("服务:" + node.AppName + " 本不在运行,不做操作");
         }
     }
 }
Esempio n. 3
0
        /// <summary>
        /// 重启节点
        /// </summary>
        /// <param name="node"></param>
        private void RebootNode(ConfigNode node)
        {
            if (node.AppType == (int)Enums.EnumAppType.可执行程序)
            {
                if (ProcessHelper.ExistProcess(node.AppName))
                {
                    Log.Info("先停掉进程" + node.AppName);
                    ProcessHelper.CloseProcess(node.AppName);
                }
                if (ProcessHelper.StartProcess(node.AppPath) == false)
                {
                    Log.Error("重启exe程序失败:" + node.AppName);
                }
                else
                {
                    Log.Info("开启exe程序:" + node.AppPath);
                }
            }
            else
            {
                ServiceManger sm = new ServiceManger();
                if (sm.GetServiceValue(node.AppName, "State").ToString().Equals(ServiceState.Stopped))
                {
                    sm.StartService(node.AppName);

                    Thread.Sleep(500);
                    if (sm.GetServiceValue(node.AppName, "State").ToString().Equals(ServiceState.Running))
                    {
                        Log.Info("重启服务成功:" + node.AppName);
                    }
                    else
                    {
                        Log.Error("重启服务失败:" + node.AppName);
                    }
                }
                else
                {
                    for (int i = 0; i < 3; i++)
                    {
                        //先停止服务
                        sm.StopService(node.AppName);
                        Log.Info("关闭服务:" + node.AppName + "  ...");
                        Thread.Sleep(500);
                        int intCount = 0;
                        while (sm.GetServiceValue(node.AppName, "State").ToString().Equals(ServiceState.Running))
                        {
                            Log.Info("等待服务:" + node.AppName + "关闭...");
                            Thread.Sleep(500);
                            if (intCount++ > Config.ServiceRebootReTryCount)
                            {
                                Log.Error("服务停止失败....");
                                break;
                            }
                        }
                        if (intCount > Config.ServiceRebootReTryCount)
                        {
                            //重试关闭
                            continue;
                        }
                        Log.Info("  开始开启服务:");
                        sm.StartService(node.AppName);
                        Thread.Sleep(500);
                        if (sm.GetServiceValue(node.AppName, "State").ToString().Equals(ServiceState.Running))
                        {
                            Log.Info("重启服务成功:" + node.AppName);
                        }
                        else
                        {
                            Log.Error("重启服务失败:" + node.AppName);
                        }
                    }
                }
            }
        }
Esempio n. 4
0
        private void RecycleGuard()
        {
            // 创建自己的日志
            IDLog log = new TinyLog();

            log.Init(_config.ID + "_" + _config.AppName, _config.ID + "_" + _config.AppName + "/log");
            int count1 = 0;

            _appErrExecutor.Log = log;

            //监控间隔提醒
            if (_config.GuardInternal < 1500)
            {
                log.Fatal("注意: 配置的监控间隔小于1.5秒,监控非常容易出问题,监控停止!GuardInternal:" + _config.GuardInternal);
                return;
            }
            else if (_config.GuardInternal < 5000)
            {
                log.Warn("注意: 配置的监控间隔小于5秒,可能存在问题!GuardInternal:" + _config.GuardInternal);
            }


            while (Common.IsRun)
            {
                Thread.Sleep(_config.GuardInternal);
                log.Info("开始一次守护主流程+++++++++++++++++++++++++++++++++++++++++++++++");
                //进行进程守护 // 不管是哪种守护类型,都需要进行守护
                try
                {
                    if (_config.AppType == (int)Enums.EnumAppType.务)
                    {
                        ServiceManger sm = new ServiceManger();
                        if (sm.GetServiceValue(_config.AppName, "State").ToString().Equals(ServiceState.Stopped))
                        {
                            log.Error("服务状态已停止,开始处理错误");
                            _appErrExecutor.HandleError(Enums.EnumHandleCondition.务进程停止, _config, LastProcessTime);
                            continue;
                        }
                        else
                        {
                            log.Info("服务状态正在运行!");
                            LastProcessTime = DateTime.Now;
                        }
                    }
                    else
                    {
                        if (ProcessHelper.ExistProcess(_config.AppName) == false)
                        {
                            log.Error("进程已停止,开始处理错误");
                            _appErrExecutor.HandleError(Enums.EnumHandleCondition.务进程停止, _config, LastProcessTime);
                            continue;
                        }
                        else
                        {
                            log.Info("进程运行正常!");
                            LastProcessTime = DateTime.Now;
                        }
                    }
                }
                catch (Exception ex)
                {
                    log.Error(string.Format("进程守护 ID[{0}] 名称[{1}] 出错: ", _config.ID, _config.AppName) + ex.ToString());
                    continue;
                }

                if (_config.GuardType == (int)Enums.EnumGuardType.心跳守护)
                {
                    log.Info("开始心跳检测");
                    try
                    {
                        log.Info("开始检测状态中心健康情况");
                        IStateCenterConnector connector = StateCenterConnectorFactory.GetAvailableConnector();
                        if (connector == null || !connector.IsCenterAlived())
                        {
                            log.Error("状态中心无法连接,开始处理错误:");
                            _appErrExecutor.HandleError(Enums.EnumHandleCondition.务不可见, _config, LastStateCenterTime);
                            continue;
                        }
                        else
                        {
                            log.Info("状态中心连接正常");
                            LastStateCenterTime = DateTime.Now;
                        }
                        string beatName = ComputerInfo.GetMacAddress() + "." + _config.AppName;
                        log.Info(string.Format("开始获取心跳时间:[{0}]", beatName));
                        // 心跳检测
                        DateTime?lastBeatTime = connector.GetLastBeatTime(beatName);
                        if (lastBeatTime.HasValue == false)
                        {
                            log.Error("连接的服务未向中心发出心跳,首次连接不正常,不进行处理");
                            count1++;
                            if (count1 > 100)
                            {
                                log.Error("超过100次,无法抓取到首次心跳反应,监控终止");
                                return;
                            }
                        }
                        else
                        {
                            //首次心跳
                            if (LastBeatTime == null)
                            {
                                LastBeatTime = lastBeatTime;
                                log.Info("首次心跳时间:" + LastBeatTime.Value.ToString("yyyy-MM-dd HH:mm:ss"));
                            }
                            else
                            {
                                log.Info("远程心跳时间: " + lastBeatTime.Value.ToString("yyyy-MM-dd HH:mm:ss"));
                                //先判断是链路是否通着,只有通着的时候,才判断是否心跳
                                if (connector.IsClientAlived(beatName))
                                {
                                    if (lastBeatTime.Value == LastBeatTime.Value)
                                    {
                                        log.Error(string.Format("心跳未进行:处理问题  lastBeatTime:" + lastBeatTime.Value.ToString("yyyy-MM-dd HH:mm:ss")));
                                        _appErrExecutor.HandleError(Enums.EnumHandleCondition.务可见心脏停止跳动, _config, LastBeatTime);
                                    }
                                    else
                                    {
                                        LastBeatTime = lastBeatTime;
                                        log.Info("正常心跳");
                                        //重置状态
                                        _appErrExecutor.ResetState();
                                    }
                                }
                                else
                                {
                                    log.Error("客户端服务未能正常连接到状态中心,心跳监控失效");
                                    continue;
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        log.Error(string.Format("心跳 ID[{0}] 名称[{1}] 出错: ", _config.ID, _config.AppName) + ex.ToString());
                        continue;
                    }
                }
            }
        }
Esempio n. 5
0
 public Server(string ipStr, int port)
 {
     SetIpAndPort(ipStr, port);
     serviceManger = new ServiceManger(this);
 }