gpt4 book ai didi

c# - .NET Core 1.1 控制台应用程序总是在 Ubuntu 16.04 上作为 systemd 服务退出/崩溃

转载 作者:太空狗 更新时间:2023-10-29 12:25:12 24 4
gpt4 key购买 nike

我正在尝试创建一个简单的回显服务,它与 systemd 一起工作初始化系统。一切正常,它甚至在快速部署后启动,但它很快退出(或崩溃),当我试图通过 systemctl status <service> 弄清楚它的状态时命令。

逻辑很简单,这里我提供下一个来源:

Program.cs

using System;
using System.Threading.Tasks;

namespace hw
{
class Program
{
private const int delay = 1000;
private static Random random = new Random();

static async Task Handle()
{
Console.WriteLine($"tick tack... {random.Next()}");
await Task.Delay(delay);
await Handle();
}

static void Main(string[] args)
{
Task.Factory.StartNew(async() => await Handle());
Console.ReadLine();
}
}
}

hw.service(系统配置文件)

[Unit]
Description=HW Echo Service

[Service]
WorkingDirectory=/var/netcore/hw
ExecStart=/usr/bin/dotnet /var/netcore/hw/hw.dll
Restart=always
RestartSec=10
SyslogIdentifier=dotnet-echo-hw

[Install]
WantedBy=multi-user.target

Help-script, init.sh(您也可以使用 chmod +x init.sh ,如果想在您的本地系统上尝试):

dotnet build
dotnet publish

echo "\nPreparing binaries for the service directory:\n"
rm -rf /var/netcore/hw
mkdir /var/netcore /var/netcore/hw
cp -R bin/Debug/netcoreapp1.1/publish/* /var/netcore/hw
ls -la /var/netcore/hw

echo "\nInitializing the systemd service:"
systemctl stop hw.service
rm /etc/systemd/system/hw.service
cp hw.service /etc/systemd/system/hw.service
systemctl daemon-reload
systemctl enable hw.service
systemctl start hw.service
systemctl status hw.service

日志:

我还在等什么?

我希望我的服务像我的其他服务 (ASP.NET Core) 一样运行(处于事件/绿色状态)作为 systemd服务。至于 ASP.NET Core 项目,没有问题,至于简单的控制台 - 它们是......

如何解决我的问题?

谢谢

最佳答案

由于 Evk 建议使用 ManualResetEvent,我已经完成了下一步:

using System;
using System.Threading;
using System.Threading.Tasks;

namespace hw
{
class Program
{
private const int delay = 1000;
private static Random random = new Random();
private static ManualResetEvent resetEvent = new ManualResetEvent(false);

static async Task Handle()
{
Console.WriteLine($"tick tack... {random.Next()}");
await Task.Delay(delay);
await Handle();
}

static void Main(string[] args)
{
Task.Factory.StartNew(async() => await Handle());
Console.CancelKeyPress += (sender, eventArgs) =>
{
// Cancel the cancellation to allow the program to shutdown cleanly.
eventArgs.Cancel = true;
resetEvent.Set();
};
resetEvent.WaitOne();
}
}
}

现在一切正常,服务不会停止/崩溃。

关于c# - .NET Core 1.1 控制台应用程序总是在 Ubuntu 16.04 上作为 systemd 服务退出/崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43818291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com