dnscryptProxy服务健康检查

This commit is contained in:
陈国伟 2021-07-22 13:12:17 +08:00
parent 072c239c66
commit e6808ed9ed

View File

@ -10,7 +10,7 @@ namespace FastGithub.Dns.DnscryptProxy
/// <summary> /// <summary>
/// DnscryptProxy后台服务 /// DnscryptProxy后台服务
/// </summary> /// </summary>
sealed class DnscryptProxyHostedService : IHostedService sealed class DnscryptProxyHostedService : BackgroundService
{ {
private const string dnscryptProxyFile = "dnscrypt-proxy"; private const string dnscryptProxyFile = "dnscrypt-proxy";
private readonly ILogger<DnscryptProxyHostedService> logger; private readonly ILogger<DnscryptProxyHostedService> logger;
@ -29,7 +29,7 @@ namespace FastGithub.Dns.DnscryptProxy
/// </summary> /// </summary>
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
public Task StartAsync(CancellationToken cancellationToken) public override Task StartAsync(CancellationToken cancellationToken)
{ {
try try
{ {
@ -48,7 +48,8 @@ namespace FastGithub.Dns.DnscryptProxy
{ {
this.logger.LogWarning($"{dnscryptProxyFile}启动失败:{ex.Message}"); this.logger.LogWarning($"{dnscryptProxyFile}启动失败:{ex.Message}");
} }
return Task.CompletedTask;
return base.StartAsync(cancellationToken);
} }
/// <summary> /// <summary>
@ -56,7 +57,7 @@ namespace FastGithub.Dns.DnscryptProxy
/// </summary> /// </summary>
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
public Task StopAsync(CancellationToken cancellationToken) public override Task StopAsync(CancellationToken cancellationToken)
{ {
try try
{ {
@ -76,9 +77,26 @@ namespace FastGithub.Dns.DnscryptProxy
{ {
this.logger.LogWarning($"{dnscryptProxyFile}停止失败:{ex.Message}"); this.logger.LogWarning($"{dnscryptProxyFile}停止失败:{ex.Message}");
} }
return Task.CompletedTask; return base.StopAsync(cancellationToken);
} }
/// <summary>
/// 后台任务
/// </summary>
/// <param name="stoppingToken"></param>
/// <returns></returns>
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (stoppingToken.IsCancellationRequested == false)
{
await Task.Delay(TimeSpan.FromSeconds(10d), stoppingToken);
var processes = Process.GetProcessesByName(dnscryptProxyFile);
if (processes.Length == 0)
{
this.logger.LogError($"检测到{dnscryptProxyFile}已停止运行,{nameof(FastGithub)}将无法使用。你可以把配置文件的PureDns修改为其它可用的DNS以临时使用。");
}
}
}
/// <summary> /// <summary>
/// 启动DnscryptProxy进程 /// 启动DnscryptProxy进程