代码之家  ›  专栏  ›  技术社区  ›  Scott Cowan

如何编写Mono守护程序

  •  52
  • Scott Cowan  · 技术社区  · 17 年前

    我正试图为linux编写一个Mono C#守护进程。

    我想在它完成处理时启动和停止它,而不仅仅是终止进程。

    编辑:我知道了如何在debian中使用start-stop后台程序,所以我想现在就使用它。

    有SessionEnd事件,但它仅适用于服务,而不适用于控制台应用

    答复: using mono-service to wrap a windows service on linux

    7 回复  |  直到 9 年前
        1
  •  25
  •   metadings    10 年前

    要以Unix方式(即使用信号)接收通知,您需要使用 Mono.Unix.UnixSignal


    您通常会在单独的线程上执行此操作。

        2
  •  19
  •   lupus    17 年前

    您应该实现一个服务并使用mono服务。谷歌搜索它,你会发现几个例子。

        3
  •  16
  •   Community Mohan Dere    9 年前

    一个简单的方法是监听(本地、高)端口并从管理客户机接收命令,就像bind一样。

    register a signal handler 使用 UnixSignal 并在接收到某一信号时正确关机。见 Mono FAQ, "Can I use signal handlers with Mono?"

    lupus mono-service ,这是一个使用 ServiceProcess 接口。不幸的是,这需要设置 MONO_DISABLE_SHM

        4
  •  4
  •   Dave Van den Eynde    17 年前

    Linux下的守护进程通常会侦听信号,比如kill信号,但也有其他一些允许它执行软重启(在配置中读取)等操作。

    通常情况下,/etc/init.d目录中会有一个脚本,用于控制启动和停止此类守护进程。通常在/var/run下创建一个pid文件,该文件保存了脚本的进程id,以便快速识别进程。

    戴夫

        5
  •  0
  •   godbyk    17 年前

    Mono C# interactive shell 您应该能够足够轻松地进行daemonize。米格尔有一个 follow-up article 一些源代码展示了如何在其他C#应用程序中包含交互式shell。它可以作为守护进程的良好起点。

    Mono's svn repository 然而

        6
  •  0
  •   Ana Betts    17 年前

    David是正确的,停止服务是通过UNIX信号完成的,您应该使用信号处理程序来捕获它。