
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
- James Hunt und Clint Byrum (2014). "Konsole". Upstart-Kochbuch.
- https://unix.stackexchange.com/a/200281/5132
- drinHandbuchseiten für Ubuntu 14.04. Kanonisch.
- Jonathan de Boyne Pollard (2001). Zu vermeidende Fehler beim Entwurf von Unix-Dämon-Programmen. Häufig gestellte Fragen.
- https://superuser.com/a/723333/38062
- https://askubuntu.com/a/613814/43344
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
atd
der Dienst:echo "program > program.log 2>program.err" | at now
oderecho "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 screen
oder tux
Sitzung und trennen es dann vom Terminal.