Daemon mit Modulen - Wie fange ich an?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Daemon mit Modulen - Wie fange ich an?

    Hi Community,

    ich habe vor einiger Zeit einen kleinen Daemon in PHP (CLI) geschrieben der verschiedene Module hat. Diese Module erledigen
    dann
    Aufgaben zu bestimmten Zeiten oder Events. Jetzt würde ich den Daemon zu Übungszwecken (und weil C Performanter ist) gerne in C schreiben (C kennen lernen).

    Mein Problem: Ich habe keine Ahnung wie ich Module in C realisieren kann/soll.

    Hier mal meine derzeitige Wunschvorstellung (wie viele, hoffe auch ich, dass ich mich verständlich ausdrücke :)):

    1. Der Daemon startet
    Wenn der Daemon startet soll aus einer Configdatei (/etc/meindaemon/meindaemon.cf) ausgelesen werden, was für Module alle mit "geladen" werden sollen. Die verfügbaren Module liegen dann in einem Ordner (/pfad/zu/module.d).

    2. Initialisierung
    Es wird ein Array aufgebaut in dem steht, welches Modul wann ausgeführt werden soll. Das sollte noch das kleinere Problem darstellen.

    3. Module (parallel) ausführen
    Mittels fork() will ich die Module in einem Childprozess (das mache ich auch in PHP schon so, auch wenn PHP nur Single-Threaded ist... - no comment) starten. Was der Childprozess dann macht ist mir aus Sicht des Daemons schnuppe. Der soll sofort das nächste Modul starten können.
    Das Modul bekommt als Fork aber schon alle nötigen Informationen (Logindaten für DB und solche Sachen) mit.

    Jetzt stehe ich vor der Frage: Wie programmiere ich mit C module?
    Dazu eine kleine Info, die euch evtl. meinen aktuellen Wissenstand erklärt:
    In PHP habe ich beim Start des Daemons einfach alle Module (extra PHP-Dateien) einmal eingebunden. In diesen PHP-Dateien mussten zu dem Modul eine gleichnamige Funktion vorhanden sein (mod_modulname()). Dadurch hatte ich den Vorteil, dass zur Laufzeit bereits alles kompiliert war (fällt bei C natürlich weg).

    4. Was ich definitiv möchte
    Soo, was will der Threadersteller überhaupt am Ende haben:
    • Ich will am Ende einen Daemon, der unabhängig von Modulen läuft. (ohne den Daemon neu zu kompilieren Module hinzufügen oder entfernen)
    • Ich will, dass ich Module unabhängig vom Daemon ausliefern kann (die Software will ich später in ein RPM-Paket packen)
    • Ich habe keine Ahnung - Aber, wenn möglich, will ich nicht, dass der Daemon syscalls machen muss um ein Modul zu starten.
    5. Wissenstand über C
    Die Syntax ist mir aus der Sprachfamilie (Java, PHP, ...) bekannt. Gewisse Grundprinzipien sind mir auch schon bekannt, da ich das eine oder andere kleine Tool in C geschrieben habe.
    Dazu kommen natürlich noch die allgemeine Programmiererfahrung und Programmierlogik - ich bin kein blutiger Anfänger.

    Ich hoffe...
    ...ihr könnt mir mal die eine oder andere Architektur (verständlich) erklären und dazu ein paar Zeilen schreiben warum ihr das so und nicht anders machen würdet und wo es evtl. Probleme geben könnte.

    Grüße,
    Erasel
    My lovely mister singing club...
  • Hi und Danke für die Antwort,

    fork() ist für mich erst mal sekundär - das war nur der Vollständigkeit halber erwähnt. Ich habe mir Shared Objects jetzt mal angeschaut und auch ein bisschen getestet - auch erfolgreich. Funktioniert sehr gut und kann so verwendet werden (ideal für das was ich machen will).

    Ideal wäre bei der Initialisierung dann wohl ein Array, der auf die gewünschten Funktionen (Module) zeigt.
    Ich werde mich da jetzt aber erst mal ein wenig was zusammen basteln und dann testweise ein paar Tage laufen lassen...

    Derweil hat der eine oder andere evtl. noch einen heißen Tipp oder Hinweis worauf man besonders achten muss, wenn man sich so einen Daemon bastelt...

    Grüße,
    Erasel
    My lovely mister singing club...