Wie führe ich ein C-Programm als Daemon aus?

Wie führe ich ein C-Programm als Daemon aus?

Ich habe ein C-Programm, das ich als Daemon ausführen möchte. Ich arbeite mit Ubuntu 14.04LTS. Wie mache ich das richtig? Kann mir jemand helfen?

Antwort1

Und jetzt die Ubuntu-Antwort.

Der richtige Weg, dies zu tun, ist der Dæmon-Manager, der mit Ubuntu 14 geliefert wird. Was andere hier über das Entwerfen eines Programms ausdrücklich als Dæmon und das Aufrufen einer daemon()Bibliotheksfunktion gesagt haben, ist völlig falsch. Ironischerweise hatte Ubuntu Upstart für drei LTS-Versionenvorbis zur Version 14 LTS – nämlich seit Ubuntu 6.10 im Jahr 2006. Seitdem verfügt es über einen Dæmon-Manager der einen oder anderen Art.

Die richtige Antwort für Leute mit einem guten Servicemanagement war, dass Sienichtrufen Sie an daemon()und Sienichtbesondere Schritte unternehmen, um „ein Dæmon zu sein“. Und für manche Leute ist das seit Anfang der 1990er Jahre die richtige Antwort. Sogar 2006 kam etwas spät dazu. ☺ Trotzdem war es in den letzten zehn Jahren definitiv die richtige Antwort, wenn es um Ubuntu geht.

Was Sie tun, ist einfach. Sie erstellen eine Upstart-Jobdatei, die Upstart mitteilt, wann und wie Ihr Programm aufgerufen werden soll. Upstart ruft es aufbereits dämonisiert, ohne ein Kontrollterminal und mit einem vorhersehbaren und unveränderlichen Anfangszustand des Prozesses. Ihr Programmmacht nichts besonderesund wird einfach ausgeführt, wobei Protokolle und Fehlermeldungen wie üblich in die Standardfehlerdatei geschrieben werden. Sie legen in der Jobdatei fest, wie Upstart mit dem umgeht, was in die Standardfehlerdatei geschrieben wird.

DerUpstart-Kochbuchbeschreibt all dies im Detail, einschließlich der verschiedenen Strophen, die Startereignisse und die Protokollverarbeitung steuern. Und hier und auf AskUbuntu gibt es viel zu diesem Thema.

Seien Sie darauf vorbereitet, dass sich die Welt für Sie erheblich verändern wird, wenn Sie später auf Ubuntu 16 LTS upgraden. Aber selbst dannnichts Besonderes im Code tun und einfach unter einem Dæmon-Manager ausführenwird die richtige Antwort bleiben.

Weiterführende Literatur

Antwort2

Wenn Sie das Programm von einem Terminal aus ausführen möchten, haben Sie folgende Möglichkeiten (Ihr Programm darf keine Benutzereingaben erfordern):

  • Verwenden Sie nohup: nohup program > program.log 2>program.err &. Anschließend können Sie das Terminal verlassen.

  • Verwendet wird atdder Dienst: echo "program > program.log 2>program.err" | at now
    oder echo "program > program.log 2>program.err" | batch.

  • als Dienst durch ein Boot-Skript.

Wenn Ihr Programm Benutzereingaben anfordert, kann es nicht außerhalb eines Terminals ausgeführt werden. Am besten verwenden Sie eine screenoder tuxSitzung und trennen es dann vom Terminal.

verwandte Informationen