Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#服务作为debian中的守护进程,使用mono服务_C#_Service_Mono_Debian_Daemon - Fatal编程技术网

C#服务作为debian中的守护进程,使用mono服务

C#服务作为debian中的守护进程,使用mono服务,c#,service,mono,debian,daemon,C#,Service,Mono,Debian,Daemon,在debian中,我似乎找不到让C#服务作为“服务”运行的方法。 我做错了什么 我根据msdn的这篇文章创建了一个示例windows服务: 我可以在我的windows计算机上运行该服务,启动和停止该服务,并查看它是否写入MyNewLog 然后我将它(.exe文件)复制到我的debian机器上,并尝试使用(作为根目录)mono服务MyNewService.exe运行它 系统日志告诉我服务已经启动 我没有错误,在系统中看不到任何新创建的日志文件。我做错了什么 如果有帮助,下面是代码: Program

在debian中,我似乎找不到让C#服务作为“服务”运行的方法。 我做错了什么

我根据msdn的这篇文章创建了一个示例windows服务:

我可以在我的windows计算机上运行该服务,启动和停止该服务,并查看它是否写入MyNewLog

然后我将它(.exe文件)复制到我的debian机器上,并尝试使用(作为根目录)mono服务MyNewService.exe运行它

系统日志告诉我服务已经启动

我没有错误,在系统中看不到任何新创建的日志文件。我做错了什么

如果有帮助,下面是代码: Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text;

namespace MyNewService
{
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main()
    {
        System.ServiceProcess.ServiceBase[] ServicesToRun;
        ServicesToRun = new System.ServiceProcess.ServiceBase[]
        { 
            new MyNewService() 
        };
        System.ServiceProcess.ServiceBase.Run(ServicesToRun);
    }
}
}

/干杯

尝试使用System.Diagnostics.EventLog以外的其他地方记录日志,可能记录到文本文件或类似文件中

我找不到最近的任何东西,但这表明在Linux上运行时事件日志被丢弃;这是有道理的

编辑:

调查单声道声源似乎证实了这一点。事件日志记录有三种可能的选项:win32、local和null。如果MONO_EVENTLOG_TYPE环境变量设置为local,那么在Linux上,默认情况下日志应写入/var/lib/MONO/EVENTLOG


您确实需要将日志记录代码与您的期望隔离开来—您的服务似乎运行良好,但日志记录是问题所在。

尝试使用System.Diagnostics.EventLog以外的其他工具进行日志记录,可能会记录到文本文件或类似文件中

我找不到最近的任何东西,但这表明在Linux上运行时事件日志被丢弃;这是有道理的

编辑:

调查单声道声源似乎证实了这一点。事件日志记录有三种可能的选项:win32、local和null。如果MONO_EVENTLOG_TYPE环境变量设置为local,那么在Linux上,默认情况下日志应写入/var/lib/MONO/EVENTLOG


您确实需要将日志记录代码与您的期望隔离开来—您的服务似乎运行良好,但日志记录是问题所在。

设置环境MONO\u EVENTLOG\u TYPE

/lib/systemd/system/order-log-writer.service

[Service]
Environment=MONO_EVENTLOG_TYPE=local:/var/lib/mono/eventlog
User=root
Group=root
Type=forking
PIDFile=/run/order-log-writer.pid
ExecStart=/usr/bin/mono-service -l:/run/order-log-writer.pid /usr/bin/rmq-bot/order-log-writer.exe
ExecStop=/bin/kill -HUP $MAINPID
C#

Linux


设置环境MONO\u事件日志\u类型

/lib/systemd/system/order-log-writer.service

[Service]
Environment=MONO_EVENTLOG_TYPE=local:/var/lib/mono/eventlog
User=root
Group=root
Type=forking
PIDFile=/run/order-log-writer.pid
ExecStart=/usr/bin/mono-service -l:/run/order-log-writer.pid /usr/bin/rmq-bot/order-log-writer.exe
ExecStop=/bin/kill -HUP $MAINPID
C#

Linux


请展示一些源代码。。。由于您的服务是在debian上启动的,所以主要问题似乎是缺少日志?请展示一些源代码。。。由于您的服务是在debian上启动的,所以主要问题似乎是缺少日志?谢谢,我已更正!我创建了一个单独的文件来登录。它成功了。现在我在停止服务时遇到问题。在PID上做了一个测试,效果良好。启动时,它将被创建并停止删除。但是它自己的服务不起作用。当移除锁时,服务可以工作,但我不能在没有“ps-efH”的情况下停止它,然后杀死PID。。。。服务我的应用程序停止不会这样做@Christian最好再补充一个新问题:)仅供参考,来源在这里,谢谢,我站在正确的位置!我创建了一个单独的文件来登录。它成功了。现在我在停止服务时遇到问题。在PID上做了一个测试,效果良好。启动时,它将被创建并停止删除。但是它自己的服务不起作用。当移除锁时,服务可以工作,但我不能在没有“ps-efH”的情况下停止它,然后杀死PID。。。。服务我的应用程序停止不会这样做@Christian最好再加上一个新问题:)仅供参考来源在这里和这里
try
{    }
catch (Exception e)
{
    EventLog.WriteEntry(this.GetType().FullName, " error[.] " + e.Message);
}
user@host:/var/lib/mono/eventlog/Application$ ls
1.log  2.log  3.log  Application  EDAClasses.OrderLogWriterClass
user@host:/var/lib/mono/eventlog/Application$ cat 1.log
InstanceID: 0
EntryType: 4
Source: EDAClasses.OrderLogWriterClass
Category: 0
TimeGenerated: 20170926140803456
ReplacementStrings: 1
 error[.] Error converting value 1 to type 'OrderLog'. Path '', line 1, position 1.