52 votes

Comment coder un démon mono

Je suis en train d'écrire un Mono C# démon pour linux.

Je voudrais faire un démarre et s'arrête d'elle quand son fait le traitement au lieu de simplement de tuer le processus.

Quelqu'un aurait-il des exemples de cela?

Edit: j'ai compris comment utiliser les start-stop-daemon --fond dans debian, donc je pense que je vais l'utiliser pour l'instant.

Edit: je suis la mise en œuvre de ce en java ainsi et ils ont cette belle addShutdownHook que les captures de résiliation de l'application. J'ai besoin de passer un peu plus de temps à trier des dépendances pour mono service, ou de trouver un moyen de rattraper application de la résiliation.

Il est le SessionEnd événement, mais c'est uniquement disponible pour les services et non de la console apps

Réponse: à l'aide de mono-service pour envelopper un service de windows sur linux

25voto

miguel.de.icaza Points 27138

Pour recevoir des notifications de manière Unix, qui utilise des signaux, vous souhaitez utiliser Mono.Unix.UnixSignal pour chaque signal que vous prévoyez de recevoir, puis appelez UnixSignal.WaitAny () sur un tableau de signaux.

Vous le feriez généralement sur un thread séparé.

19voto

lupus Points 2955

Vous devez implémenter un service et utiliser mono-service. Google et vous trouverez plusieurs exemples.

16voto

David Schmitt Points 29384

Une méthode simple serait d'écouter sur une (grande) port et de recevoir des commandes d'un client de la gestion, à l'instar de lier ne.

Un plus unix-ish façon serait d' enregistrer un gestionnaire de signal à l'aide de UnixSignal et d'arrêt correctement sur un certain signal. Voir le Mono FAQ "puis-je utiliser les gestionnaires de signaux Mono?" des mises en garde et un exemple.

lupus a trouvé mono-service, qui est un processus d'hébergement à l'aide de l' ServiceProcess interfaces. Malheureusement, cela nécessite la définition d' MONO_DISABLE_SHM, ce qui désactive certaines fonctionnalités en Mono, en particulier les processus systèmes CIB.

4voto

Dave Van den Eynde Points 8199

Un démon sous Linux généralement écoute des signaux, comme le signal kill, mais il en existe d'autres qui lui permettent de faire des choses comme un doux redémarrer (lue dans la configuration), et ainsi de suite.

Typiquement, cela est accompagné par un script dans /etc/init.d répertoire qui contrôle le démarrage et l'arrêt de ces démons. Généralement, un fichier pid est créé dans /var/run, qui garde l'id de processus pour le script afin d'identifier le processus rapidement.

Même lorsque le codage pour les Mono, vous feriez bien comprendre l'environnement pour lequel vous êtes en train de codage, car il n'y a pas de différence entre un Mono processus ou un processus natif (créé en C, par exemple) ou un script.

Dave

0voto

godbyk Points 4357

Miguel de Icaza a récemment écrit à propos d'un nouveau Mono C# shell interactif que vous devriez être en mesure de daemonize assez facilement. Miguel a un article de suivi avec le code source qui montre comment vous pouvez inclure le shell interactif dans d'autres applications C#. Il peut servir comme un bon point de départ pour votre démon.

Notez que le shell interactif nécessite Mono version 2.2, qui n'a pas encore été dévoilé. Le code est disponible en Mono du référentiel svn, cependant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X