【问题标题】:Application does not exit when an error happening on systemdsystemd 发生错误时应用程序不退出
【发布时间】:2019-01-06 12:49:38
【问题描述】:

所以我使用.net-core 开发了一个应用程序,我在Linux 机器上使用systemd 将这个软件作为daemon 服务运行。现在的问题是,当应用程序中发生错误时,它会进入“边缘”,实际上应用程序的每个活动都是使用Console.WriteLine 记录的,我可以看到这个日志在 linux 机器上键入该命令:journalctl -fu app.service

当错误发生时,日志不会写入任何内容,但同时应用程序会继续运行,这真的很奇怪,因为我使用以下配置设置了服务:

[Unit]
Description = Daemon service

[Service]
ExecStart = /usr/bin/dotnet /home/my username/Desktop/publish/SimpleApp.dll
WorkingDirectory= /home/foo/Desktop/publish
Restart = always
RestartSec = 3

[Install]
WantedBy = multi-user.target

如您所见,Restart = always 应在出现错误时重新启动应用程序。当引发异常时,Error() 方法将错误写入文件中,然后按以下方式终止软件:

public void Error(Exception ex)
{
   File.WriteAllText("error.txt", ex.ToString());
   Environment.Exit(1); 
}

Environment.ExitLinux 环境一定有问题,否则我调用 Environment.Exit 时做错了。还有其他方法可以关闭像这样作为系统服务运行的应用程序吗?

谢谢

【问题讨论】:

  • 在我看来,您捕获了异常,但没有抛出新错误。这意味着系统不知道发生了错误
  • @Aldert 你提出解决方案了吗?
  • 有几件事:(a) 你确定Error() 真的被调用了吗?` error.txt 文件是否存在? (b) 从一个守护进程不要假设相对路径,使用/tmp/error.txt/var/error.txt 或类似的。 (c) 我不会假设 Environment.Exit() 不起作用。而是由systemd 立即重新启动您的应用程序(因此在您的配置中使用Restart = always)。

标签: c# linux .net-core systemd


【解决方案1】:

尝试以下方法:

public void Error(Exception ex)
{
   File.WriteAllText("error.txt", ex.ToString());
   throw new Exception ("This is a test to see if restart is working");
}

【讨论】:

    猜你喜欢
    • 2017-11-23
    • 2021-03-26
    • 2017-04-14
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多