标签: mono-service

我如何编写Mono守护进程的代码

我正在尝试为Linux编写一个Mono C#守护进程.

当它完成处理而不是仅仅杀死进程时,我想做它的启动和停止.

有没有人有这方面的例子?

编辑:我想出如何在debian中使用start-stop-daemon --background,所以我想我现在就用它.

编辑:我也在java中实现这个,他们有这个很好的addShutdownHook,可以捕获终止应用程序.我需要花费更多的时间来整理单声道服务的依赖关系,或找到一种方法来捕获应用程序终止.

有SessionEnd事件,但这仅适用于服务而非控制台应用程序

答: 使用mono-service在Linux上包装Windows服务

c# linux mono daemon mono-service

52
推荐指数
3
解决办法
2万
查看次数

使用mono-service在Linux上包装Windows服务

嗨,我正在尝试使用mono-service2从visual studio运行一个股票Windows服务项目.我正在使用mono 2.0和编译器在debian上运行它.

gmcs *.cs -pkg:dotnet
Run Code Online (Sandbox Code Playgroud)

我尝试从这开始(我尝试使用-d设置为dir与app和-n,-m设置)

mono-service2 -l:service.lock --debug Program.exe
Run Code Online (Sandbox Code Playgroud)

唯一的代码更改是添加用于测试的writelines

Service1.cs

using System;
using System.ServiceProcess;

namespace spikes
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            Console.WriteLine("starting...");
        }

        protected override void OnStop()
        {
            Console.WriteLine("stopping....");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是这个错误

Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for Mono.Unix.Native.Syscall ---> System.DllNotFoundException: libMonoPosixHelper.so
  at (wrapper managed-to-native) Mono.Unix.Native.Syscall:_L_ctermid ()
  at Mono.Unix.Native.Syscall..cctor () [0x00000]
  --- End of inner exception …
Run Code Online (Sandbox Code Playgroud)

linux mono mono-service

13
推荐指数
1
解决办法
2万
查看次数

.NET服务到Linux守护程序

我正在使用.NET 3.5编写便携式服务/守护进程,我的Windows服务正在运行,但我想知道单声道端口...

如果我理解正确,单声道服务就是我正在寻找的.这究竟是如何工作的?我假设我的服务中需要单声道兼容代码,对吗?例如,我正在使用SQLite.是否正确,为了使用单声道我应该重构我的代码使用单声道命名空间等,如Mono.Data.SQLite?我还可以使用Settings.settings吗?

另外,我已经读过守护进程没有实现onStart/Stop方法,所以我需要更改我的代码才能在mono/linux下运行吗?即在我的代码中使用这些方法是否可以,并且可以运行ServiceBase.Run()?Mono-service是否适应这些?

c# mono service daemon mono-service

11
推荐指数
1
解决办法
8532
查看次数

如何检测我是否在单一服务中运行?

如何检测我在mono-service2下运行?(在C#/ .NET 3.5中,在ubuntu 11上运行mono 2.6.7)

Type.GetType("Mono.Runtime")告诉我我正在单声道运行,所以那部分还可以.但是Environment.UserInteractive在单声道下看起来总是假的,所以我很难弄清楚我是否真的在mono-service2下运行 - 没有控制台/终端.

c# linux mono mono-service

7
推荐指数
1
解决办法
1771
查看次数

使用单一服务在Linux上测试Windows DOTNET服务

我正在尝试使用单一服务在Linux上运行Windows .NET-4.0服务.它不是用单声道或任何东西编译的.我不是100%它可行,但我想我可以尝试(二进制兼容等,似乎可行吗?).如我错了请纠正我.

我收到错误,它找不到一些dll.他们在系统中,但它没有找到它们.这是一个.

$ ldconfig -p | grep Posix
    libMonoPosixHelper.so (libc6,x86-64) => /usr/lib/libMonoPosixHelper.so
Run Code Online (Sandbox Code Playgroud)

我尝试添加路径等但没有变化.

$ MONO_LOG_LEVEL=debug mono-service MyService.exe --debug > output.log
Run Code Online (Sandbox Code Playgroud)

要么

$ MONO_PATH=/usr/lib MONO_LOG_LEVEL=debug mono-service MyService.exe --debug > output.log
Run Code Online (Sandbox Code Playgroud)

或LD_LIBRARY_PATH,这是空的,所以我试过

export LD_LIBRARY_PATH=/usr/lib
Run Code Online (Sandbox Code Playgroud)

在输出中总是这样:

Mono: DllImport attempting to load: 'libMonoPosixHelper.so'.
Mono: DllImport loading library: '/usr/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/libMonoPosixHelper.so'.
Mono: DllImport error loading library '/usr/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/libMonoPosixHelper.so: cannot open shared object file: No such file or directory'.
Mono: DllImport loading library: '/usr/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/libMonoPosixHelper.so'.
Mono: DllImport error loading library '/usr/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/libMonoPosixHelper.so: cannot open shared object file: No …
Run Code Online (Sandbox Code Playgroud)

c# linux mono .net-4.0 mono-service

7
推荐指数
1
解决办法
2808
查看次数

start-stop-daemon和mono-service2的成功?

有没有人使用start-stop-daemon和mono-service2一起成功?我已经和它斗争了几天了,已经有了各种各样的工作,但是没有成功为单声道服务获得一个功能齐全的init脚本.

这是我迄今所学到的:

  1. 单声道或单声道服务exe必须命名为变量DAEMON(您不能将您的exe列为DAEMON)

  2. 您必须使用--background标志...否则,当从包安装程序执行此脚本时(在我的情况下为deb).安装程序结束时服务终止(与安装程序分叉处理的方式有关...我没有对此进行过多次调查).

  3. 我已经成功地在其他脚本中使用mono-service标志列出了pid文件并使用它来停止守护进程,但由于某种原因它在这里不起作用.因此,下面的脚本不会停止服务 - 不知道为什么.开始工作正常.

这是我的部分功能初始化脚本:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          ServiceName
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts and Stops Service
# Description:       Service start|stop|restart
### END INIT INFO

# Author: Author
#

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Description of the service"
NAME=Service.exe
DAEMONNAME=ServiceDaemon.sh
INSTALLDIR=/usr/sbin/ …
Run Code Online (Sandbox Code Playgroud)

mono daemon init mono-service

5
推荐指数
1
解决办法
1万
查看次数

Linux上的mono-service2用于Dotnet4服务

基本上我有一个dotnet 4控制台应用程序,我想转换为Linux服务.我已经在最新版本的mono上测试了控制台应用程序,它可以工作.然后我将控制台应用程序转换为Windows服务,并尝试使用mono-service2启动它,但它导致了一些关于未找到图像的错误.它似乎是在谈论单声道图像或一些这样的而不是图像文件,如果这是有道理的.似乎mono-service2是为dotnet 2.0而不是dotnet 4.0构建的,我似乎无法找到dotnet 4.0版本的代码.任何人都可以指出我正确的方向或给我另一种方式来运行我的服务?我真的希望它们在webmin中显示为服务,这样我就可以停止,启动并检查它们在网络上的状态.

我无法发布确切的错误,因为我没有它,但如果有帮助的话,我会在大约6个小时内发布.

linux mono .net-4.0 mono-service

3
推荐指数
1
解决办法
3348
查看次数

Windows上的单一服务

我继承了一个使用运行Windows服务的mono的应用程序.所有原始开发人员都不见了.生产版本在linux上使用mono.我正在尝试启动和运行开发环境.我决定使用windows作为运行单声道的基础平台.好吧也许不是最好的想法,因为我当前的问题,但我想尝试在将环境转移到Linux之前了解这个问题.

问题是我无法运行单一服务.我可以使用mono来运行小型winforms应用程序.我的问题与之前的问题答案相同.使用mono-service在Linux上包装Windows服务 然而我无法翻译在Windows环境中做什么的答案.我确信我没有加载DLL的问题.

未处理的异常:System.TypeInitializationException:Mono.Unix.Native.Syscall ---> System.EntryPointNotF oundException的类型初始化程序抛出异常:Mono_Posix_Syscall_L_ctermid at(包装器托管到本机)Mono.Unix.Native.Syscall: _L_ctermid()at Mono.Unix.Native.Syscall..cctor()[0x00000] ---内部异常堆栈跟踪结束---在MonoServiceRunner.Main(System.String [] args)[0x00000]

我添加了monodevelop环境变量并设置为"all"并有一个日志文件.没有文本将记录日志文件.而且我无法获得上面发布的内容.有人能指出我正确的方向.

windows mono mono-service

2
推荐指数
1
解决办法
1658
查看次数

杀死-9后为什么单声道服务没有重启?

我用单机服务

mono-service2 -l:lockfile process.exe
Run Code Online (Sandbox Code Playgroud)

它开始服务,一切都很好,但我不得不在源头改变一些东西.所以我重新编译并部署了它.我通过跑步杀了这项服务

kill -9 <pid>
Run Code Online (Sandbox Code Playgroud)

现在我尝试再次运行该服务.但它根本没有开始.这里有什么问题 ?

mono mono-service

0
推荐指数
1
解决办法
2058
查看次数

标签 统计

mono ×9

mono-service ×9

linux ×5

c# ×4

daemon ×3

.net-4.0 ×2

init ×1

service ×1

windows ×1