Merge branch 'github_master' of http://git.newlifex.com/NewLife/Stardust into github_master
* 'github_master' of http://git.newlifex.com/NewLife/Stardust: 改善用户体验:添加返回主菜单选项 增强服务重启功能及日志记录
This commit is contained in:
commit
fd9245d274
|
@ -36,13 +36,14 @@ public class RestartService : BaseCommandHandler
|
|||
var status = es != null ? "运行中" : "已停止";
|
||||
XTrace.WriteLine("{0}. {1} ({2})", i + 1, svc.Name, status);
|
||||
}
|
||||
XTrace.WriteLine("0. 返回主菜单");
|
||||
|
||||
// 获取用户输入
|
||||
XTrace.WriteLine("请输入服务序号或名称:");
|
||||
XTrace.WriteLine("请输入服务序号或名称(0 返回主菜单):");
|
||||
var input = Console.ReadLine();
|
||||
if (String.IsNullOrEmpty(input))
|
||||
if (String.IsNullOrEmpty(input) || input == "0")
|
||||
{
|
||||
XTrace.WriteLine("操作已取消");
|
||||
XTrace.WriteLine("返回主菜单...");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -34,13 +34,14 @@ public class StartService : BaseCommandHandler
|
|||
var svc = services.Services[i];
|
||||
XTrace.WriteLine("{0}. {1}", i + 1, svc.Name);
|
||||
}
|
||||
XTrace.WriteLine("0. 返回主菜单");
|
||||
|
||||
// 获取用户输入
|
||||
XTrace.WriteLine("请输入服务序号或名称:");
|
||||
XTrace.WriteLine("请输入服务序号或名称(0 返回主菜单):");
|
||||
var input = Console.ReadLine();
|
||||
if (String.IsNullOrEmpty(input))
|
||||
if (String.IsNullOrEmpty(input) || input == "0")
|
||||
{
|
||||
XTrace.WriteLine("操作已取消");
|
||||
XTrace.WriteLine("返回主菜单...");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,13 +38,14 @@ public class StopService : BaseCommandHandler
|
|||
XTrace.WriteLine("{0}. {1} (PID: {2})", i + 1, svc.Name, es.ProcessId);
|
||||
}
|
||||
}
|
||||
XTrace.WriteLine("0. 返回主菜单");
|
||||
|
||||
// 获取用户输入
|
||||
XTrace.WriteLine("请输入服务序号或名称:");
|
||||
XTrace.WriteLine("请输入服务序号或名称(0 返回主菜单):");
|
||||
var input = Console.ReadLine();
|
||||
if (String.IsNullOrEmpty(input))
|
||||
if (String.IsNullOrEmpty(input) || input == "0")
|
||||
{
|
||||
XTrace.WriteLine("操作已取消");
|
||||
XTrace.WriteLine("返回主菜单...");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
// 等待服务完全停止
|
||||
Thread.Sleep(1000);
|
||||
// 检查服务是否正在运行
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
XTrace.WriteLine("服务[{0}]未运行,直接启动", serviceName);
|
||||
span?.AppendTag("DirectStart");
|
||||
}
|
||||
|
||||
// 启动服务(无论之前是否运行)
|
||||
XTrace.WriteLine("启动服务[{0}]", serviceName);
|
||||
span?.AppendTag("StartService");
|
||||
|
||||
// 再启动服务
|
||||
var startResult = manager.Start(serviceName);
|
||||
return startResult == true;
|
||||
if (startResult == true)
|
||||
{
|
||||
XTrace.WriteLine("服务[{0}]重启成功", serviceName);
|
||||
span?.AppendTag("Success");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
XTrace.WriteLine("服务重启失败:无法启动服务[{0}]", serviceName);
|
||||
span?.AppendTag("StartFailed");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
XTrace.WriteLine("服务[{0}]重启时发生异常:{1}", serviceName, ex.Message);
|
||||
span?.SetError(ex, null);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue