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