Dotnet应用程序启动,因为守护程序无法正常工作

时间:2018-05-24 16:29:28

标签: c# .net linux .net-core daemon

我使用NetCore开发了一个简单的应用程序,应用程序每次执行时都会在文件上写入内容,这就是代码:

using System;
using System.IO;

namespace SimpleApp
{
   class Program
   {
       static void Main(string[] args)
       {
          using (StreamWriter writer = new StreamWriter("log.txt", true))
          {
              writer.WriteLine("Hello World");
          }
       }
   }
}

所以如果我以这种方式启动应用程序:dotnet SimpleApp.dll我会收到一个log.txt个文件,其中包含Hello World

现在,我正在尝试创建一个Linux守护进程,我没有经验,所以我写了我在Internet上学到的东西,我创建了一个包含这种结构的服务cakked console.service

[Unit]
Description = Hello World Daemon

[Service]
ExecStart = /usr/bin/dotnet /home/my username/Desktop/publish/SimpleApp.dll
Restart = on-failure

[Install]
WantedBy = multi-user.target

基本上我有一个描述,我在ExecStart中设置了dotnet安装的路径和应用程序的路径。

稍后我有一个Install,如果能够理解,请告诉systemctl该服务可以为每个用户运行,对吗?

稍后,我将服务复制到system文件夹中:

sudo cp console.service /lib/systemd/system

我启用了它:

sudo systemctl daemon-reload 
sudo systemctl enable console.service

所以,我执行了服务:

sudo systemctl start console.service

当我打印状态时:

systemctl status console.service
将显示

enter image description here

问题是文件夹publish内部(ExecStart中指定的应用程序的路径)我此时没有任何log.txt。

为什么?

1 个答案:

答案 0 :(得分:0)

由于您只为文件指定了相对路径,因此它将在服务的工作目录中创建。

您可以将"log.txt"更改为完整路径,也可以在.service文件中设置工作目录:

[Service]
WorkingDirectory=/path/you/want/the/file/to/be/in
…