Gibt es einen "Standard" Weg, um einen Daemon in Debian zu erstellen?

17

Ich muss einen Daemon aus der Anwendung in Debian erstellen. Gibt es ein Standardwerkzeug dafür in Debian wie "upstart" in Ubuntu? Ich brauche nur Start-Stopp-Befehle, um ein Programm als Daemon mit einigen Optionen und einer PID-Datei zu starten und es mit einer PID-Datei zu beenden.

Ich habe mir init.d angesehen, aber es sieht so aus, als ob dies zum Booten gedacht ist. Ich möchte meinen Daemon manuell starten.

Kuroki Kaze
quelle
2
Beachten Sie, dass sich dies für debian jessie geändert hat, das den Standard von sysvinit auf systemd geändert hat.
Jules
debian jessie scheint irgendeine Form von Abwärtskompatibilität zu haben, zumindest unter Verwendung von / usr / bin / service - wenn es keine Startkonfiguration (/etc/init/{service}.conf) gibt und es eine Sysvinit-Konfiguration (/ etc / init) gibt. d / {service}), dann interagiert / usr / bin / service wie zuvor unter sysvinit mit /etc/init.d/{service}.
Kevin

Antworten:

18

Sie können Ihren Daemon manuell erstellen, indem Sie der /etc/init.d/skeletonDebian-Datei folgen .

Mit können Sie Ihren Daemon /usr/bin/servicestarten $ sudo service yourdaemon startund stoppen $ sudo service yourdaemon stop.

Solange Sie Ihr Skript nicht mit einem der /etc/rc?.dVerzeichnisse verknüpfen , wird es beim Start nicht gestartet.

Auf der anderen Seite möchten Sie sich vielleicht Daemontools ansehen , die nicht zum Standard von Debian gehören , aber einige interessante Funktionen haben.

chmeee
quelle
Vielen Dank. Ich habe anscheinend noch nichts /usr/bin/serviceauf meinem System (es ist Debian Lenny), aber ich kann Skripte direkt mit starten /etc/init.d/myservice start.
Kuroki Kaze
3
Sie können sudo invoke-rc.d yourservice startauch
chmeee
Wusste ich nicht. Thx
chiggsy
3

Debian (und Ubuntu) haben das Hilfsprogramm, start-stop-daemondas in den Init-Skripten verwendet wird. Es gibt einige Optionen, um Dämonen zu starten und zu verfolgen. Sie können einfach einen Wrapper darum schreiben, z

case $1 in
start) start-stop-daemon --start --exec /my/exec/prog --pidfile /my/pid/file --background
       ;;
stop)  start-stop-daemon --stop --pidfile /my/pid/file 
       ;;
esac
Dan Andreatta
quelle
3
Ich würde /etc/init.d/skeleton bevorzugen, da es auch INIT INFO-Teile enthält, die bei der Migration zum Hochfahren von Abhängigkeiten
helfen
2

Um einen Prozess für Debian ordnungsgemäß zu dämonisieren, müssen Sie mehrere Schritte ausführen, einschließlich des Verzweigens aus dem Steuerungsprozess, des Zurücksetzens der E / A und des Erstellens einer Prozess-ID-Datei, um nett zu spielen. Sie können stattdessen so etwas wie das Daemon-Programm aus dem gleichnamigen Paket verwenden, um dies für Sie zu tun. Wenn Sie dies möchten, finden Sie die Antwort hier auf StackOverflow: /programming/3095566/linux-daemonize

Der Befehl upstart ähnelt eher Debians Befehl invoke-rc.d oder dem Befehl service aus dem Paket sysvinit-utils. Sie erwarten, dass sie mit Init-Skripten in /etc/init.d arbeiten. Es ist Standard in Debian, eines davon für Ihr Paket zu erstellen und es das Programm start-stop-daemon verwenden zu lassen, wie Sie im Beispiel /etc/init.d/skeleton sehen können.

Nur weil Sie ein Skript /etc/init.d/myservice erstellen, muss es nicht automatisch gestartet werden. Mit einem Tool wie update-rc.d können Sie die Runlevel anpassen, bei denen es automatisch stoppt und startet. Dies wird unter Deaktivieren des Startens eines Dienstes auf allen Runlevels ausführlicher beschrieben .

jla
quelle