我使用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
将显示:
问题是文件夹publish
内部(ExecStart中指定的应用程序的路径)我此时没有任何log.txt。
为什么?
答案 0 :(得分:0)
由于您只为文件指定了相对路径,因此它将在服务的工作目录中创建。
您可以将"log.txt"
更改为完整路径,也可以在.service文件中设置工作目录:
[Service]
WorkingDirectory=/path/you/want/the/file/to/be/in
…