增强服务重启功能及日志记录
在 `StarService.cs` 中添加了多个命名空间引用以支持新功能。 改进了 `InternalRestartService` 方法,增加了详细的日志记录和错误处理,移除了原有的服务停止逻辑,并新增了 `GetRestartFailureMessage` 方法以提供重启失败的详细原因。 同时,增强了异常处理,便于后续故障排查。
This commit is contained in:
parent
242f5ea202
commit
e1583f22aa
|
@ -1,5 +1,6 @@
|
|||
using System.Collections.Concurrent;
|
||||
using System.Diagnostics;
|
||||
|
||||
using NewLife;
|
||||
using NewLife.Agent;
|
||||
using NewLife.Data;
|
||||
|
@ -9,6 +10,7 @@ using NewLife.Net;
|
|||
using NewLife.Remoting;
|
||||
using NewLife.Remoting.Models;
|
||||
using NewLife.Threading;
|
||||
|
||||
using Stardust;
|
||||
using Stardust.Managers;
|
||||
using Stardust.Models;
|
||||
|
@ -259,10 +261,14 @@ public class StarService : DisposeBase, IApi
|
|||
{
|
||||
// 使用共同的重启逻辑
|
||||
var success = InternalRestartService(Manager, serviceName, "API调用重启");
|
||||
|
||||
// 根据结果提供更详细的信息
|
||||
var message = success ? "服务重启成功" : GetRestartFailureMessage(Manager, serviceName);
|
||||
|
||||
return new ServiceOperationResult
|
||||
{
|
||||
Success = success,
|
||||
Message = success ? "服务重启成功" : "服务重启失败",
|
||||
Message = message,
|
||||
ServiceName = serviceName
|
||||
};
|
||||
}
|
||||
|
@ -277,6 +283,25 @@ public class StarService : DisposeBase, IApi
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>获取重启失败的详细原因</summary>
|
||||
private static String GetRestartFailureMessage(ServiceManager manager, String serviceName)
|
||||
{
|
||||
if (manager?.Services?.Any(e => e.Name.EqualIgnoreCase(serviceName)) != true)
|
||||
{
|
||||
return "服务不存在";
|
||||
}
|
||||
|
||||
var isRunning = manager.RunningServices?.Any(e => e.Name.EqualIgnoreCase(serviceName)) == true;
|
||||
if (isRunning)
|
||||
{
|
||||
return "服务重启失败:停止服务失败";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "服务重启失败:启动服务失败";
|
||||
}
|
||||
}
|
||||
|
||||
private void DoRefreshLocal(Object state)
|
||||
{
|
||||
var ai = AgentInfo.GetLocal(true);
|
||||
|
@ -543,21 +568,71 @@ public class StarService : DisposeBase, IApi
|
|||
{
|
||||
if (manager == null || serviceName.IsNullOrEmpty()) return false;
|
||||
|
||||
using var span = DefaultTracer.Instance?.NewSpan(nameof(InternalRestartService), new { serviceName, reason });
|
||||
|
||||
try
|
||||
{
|
||||
// 先停止服务
|
||||
var stopResult = manager.Stop(serviceName, reason);
|
||||
if (stopResult != true) return false;
|
||||
// 检查服务是否存在
|
||||
var service = manager.Services?.FirstOrDefault(e => e.Name.EqualIgnoreCase(serviceName));
|
||||
if (service == null)
|
||||
{
|
||||
XTrace.WriteLine("服务重启失败:服务[{0}]不存在", serviceName);
|
||||
span?.AppendTag("ServiceNotFound");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 检查服务是否正在运行
|
||||
var runningServices = manager.RunningServices;
|
||||
var isRunning = runningServices?.Any(e => e.Name.EqualIgnoreCase(serviceName)) == true;
|
||||
|
||||
XTrace.WriteLine("开始重启服务[{0}],当前状态:{1},原因:{2}", serviceName, isRunning ? "运行中" : "已停止", reason);
|
||||
|
||||
if (isRunning)
|
||||
{
|
||||
// 服务正在运行,先停止服务
|
||||
XTrace.WriteLine("停止服务[{0}]", serviceName);
|
||||
span?.AppendTag("StopService");
|
||||
|
||||
var stopResult = manager.Stop(serviceName, reason);
|
||||
if (stopResult != true)
|
||||
{
|
||||
XTrace.WriteLine("服务重启失败:无法停止服务[{0}]", serviceName);
|
||||
span?.AppendTag("StopFailed");
|
||||
return false;
|
||||
}
|
||||
|
||||
XTrace.WriteLine("服务[{0}]停止成功,等待1秒后启动", serviceName);
|
||||
// 等待服务完全停止
|
||||
Thread.Sleep(1000);
|
||||
|
||||
// 再启动服务
|
||||
var startResult = manager.Start(serviceName);
|
||||
return startResult == true;
|
||||
}
|
||||
catch
|
||||
else
|
||||
{
|
||||
XTrace.WriteLine("服务[{0}]未运行,直接启动", serviceName);
|
||||
span?.AppendTag("DirectStart");
|
||||
}
|
||||
|
||||
// 启动服务(无论之前是否运行)
|
||||
XTrace.WriteLine("启动服务[{0}]", serviceName);
|
||||
span?.AppendTag("StartService");
|
||||
|
||||
var startResult = manager.Start(serviceName);
|
||||
if (startResult == true)
|
||||
{
|
||||
XTrace.WriteLine("服务[{0}]重启成功", serviceName);
|
||||
span?.AppendTag("Success");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
XTrace.WriteLine("服务重启失败:无法启动服务[{0}]", serviceName);
|
||||
span?.AppendTag("StartFailed");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
XTrace.WriteLine("服务[{0}]重启时发生异常:{1}", serviceName, ex.Message);
|
||||
span?.SetError(ex, null);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue