[Mono-dev] Writing a cross platform daemon in C#
Charlie Poole
charlie at nunit.com
Sat Jan 9 17:57:57 EST 2010
Hi,
For Windows services, I usually put everything into a dll and then
write too exe shells - a service for production use and a console
app for use in testing and debugging. Of course, most of my
unit tests just use the dll.
I don't have anything for you on the cross-platform part, but I'll
be interested to see what you come up with.
Charlie
> -----Original Message-----
> From: mono-devel-list-bounces at lists.ximian.com
> [mailto:mono-devel-list-bounces at lists.ximian.com] On Behalf
> Of mabra at manfbraun.de
> Sent: Saturday, January 09, 2010 12:23 PM
> To: mono-devel-list at lists.ximian.com
> Subject: Re: [Mono-dev] Writing a cross platform daemon in C#
>
> Hi !
>
> For the windows-part, write a service [which derives from
> ServiceBase]. To make the source running in both worlds, mono
> must implement this and I think [hope?], this is the case. To
> make a windows service running as a console app - and so, it
> should run under linux - use this main method:
>
> public static void Main(string[] args) //(Regard breaks, use
> full width) {
> Service service = new Service();
>
> if(Environment.UserInteractive)
> {
> //Attach a control-c handler for the console to
> allow the app to notify about exit.
>
> service.consoleControl = new ConsoleControl();
> ConsoleControl.ControlEventHandler controlEventHandler =
> new
> ConsoleControl.ControlEventHandler(service.ConsoleControlHandler);
> service.consoleControl.ControlEvent +=
> controlEventHandler;
> service.exitSignal = new ManualResetEvent(false);
>
>
> service.OnStart(args); //For interactive use, call the
> services "OnStart()" "manually" ...
>
> //Wait for the control-c handler for the
> console to allow the app to notify about exit.
>
> service.WaitForExit(); //Do not do, how to
> make this under
> (lin)(u)nix ;-)
>
> service.OnStop();
> }
> else
> {
> System.ServiceProcess.ServiceBase.Run(service);
> }
> }
>
> I do not know - under linux - how the end signal is finally received.
> I use the obove to make minimal tests for services under windows.
>
> Hope, this helps.
>
> br--mabra
>
>
> -----Original Message-----
> From: mono-devel-list-bounces at lists.ximian.com
> [mailto:mono-devel-list-bounces at lists.ximian.com] On Behalf
> Of Miguel de Icaza
> Sent: Friday, January 08, 2010 9:57 PM
> To: paul at all-the-johnsons.co.uk
> Cc: mono-devel
> Subject: Re: [Mono-dev] Writing a cross platform daemon in C#
>
> Hello,
>
> > Does anyone have any examples of (or can point me to easy to
> > understand examples of) daemons in C# and port monitoring in C#?
>
> A daemon is merely a program that is not connected to a terminal or a
> GUI. All you need to do to launch a program as a daemon is to launch
> it in the background either from a startup script on your
> system, or by calling Mono like this:
>
> nohup mono program.exe &
>
> Since daemons typically can not reliably log data to
> stdout/stderr, they tend to write their data using syslog so
> the data ends up in a system managed log, or even better,
> they dump the data in a well known location, like this:
>
> nohup mono daemon.exe /home/logs/mylogs &
>
> Or you can dump the data in a database (this might be a better idea).
>
> Additionally, daemons ideally can be controlled remotely, the
> operations on Linux are usually pretty trivial and are based
> on hooking up to
> signals to receive very simple messages. Usually the message means
> "Relaod your configuration" or "Shut down propertly".
>
> In this day and age, you might be better off just controlling your
> daemon using a tiny protocol. You could listen on a socket on a well
> known port, and send command there, or if you are feeling Web
> two point ohish, you can start an HttpListener and control
> your daemon by navigating to http://localhost:YOURPORT/ and
> issuing commands there.
>
> Miguel
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
More information about the Mono-devel-list
mailing list