Referenz für die korrekte Handhabung der PID-Datei unter Unix
Wo finde ich eine angesehenen Referenzdass details den richtigen Umgang mit der PID-Dateien auf Unix?
Unter Unix-Betriebssystemen ist es üblich, auf "lock" ein Programm (oft ein daemon) durch die Verwendung eines speziellen lock-Datei: die PID-Datei.
Dies ist eine Datei in einem vorhersagbaren Ort, oft ‘/var/run/foo.pid". Das Programm soll überprüfen, wenn es startet, ob die PID-Datei vorhanden ist, und, wenn die Datei existiert, mit einem Fehler beenden. Also ist es eine Art der Beratung, der kooperativen Verriegelung.
Die Datei enthält eine einzige Zeile text, wird der numerische Prozeß-ID (daher der name "PID-Datei") der Prozess, der zurzeit das Schloss; dies ermöglicht eine einfache Möglichkeit zu automatisieren, senden ein signal an den Prozess, hält die Sperre.
Was ich nicht finden kann ist eine gute Referenz, auf erwartete oder "best practice" Verhalten für die Handhabung von PID-Dateien. Es gibt verschiedene Nuancen: wie wird eigentlich die Datei sperren (don ' T bother? verwenden Sie den kernel? was über die Plattform Unverträglichkeiten?), Umgang mit veralteten Schleusen (im hintergrund löschen? wenn Sie zu überprüfen?), Wann genau Sie zu erwerben und zu entriegeln, und so weiter.
Wo finde ich eine geachtet, die meisten autoritative Referenz (idealerweise auf der Ebene von W. Richard Stevens) für dieses kleine Thema?
InformationsquelleAutor der Frage bignose | 2009-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Soweit ich weiß, PID-Dateien sind eine Konvention und nicht als etwas, das Sie finden können, eine ANGESEHENE, meist maßgebliche Quelle für. Die nächsten, die ich finden konnte ist dieser Abschnitt der Dateisystem-Hierarchie-Standard.
Diese Perl-Bibliothek könnte hilfreich sein, da es aussieht, hat der Autor zumindest Gedanken gemacht, einige Probleme entstehen können.
Glaube ich, dass die Dateien unter /var/run werden Häufig behandelt, indem die distro-maintainer eher als daemons "Autoren, denn es ist die distro-maintainer' Verantwortung, um sicherzustellen, dass alle init-Skripte spielen schön zusammen. Ich überprüfte die Debian-und Fedora-Entwickler-Dokumentation und konnten keine detaillierten Richtlinien, aber Sie könnten in der Lage sein, um erhalten Sie weitere Informationen über Ihre Entwickler-mailing-Listen.
InformationsquelleAutor der Antwort Josh Kelley
First off, die auf allen modernen UNIX-Versionen
/var/run
wird nicht bleiben über Neustarts hinweg erhalten.Die Allgemeine Methode der Behandlung der PID-Datei zu erstellen, die es während der Initialisierung und löschen Sie es von allen verlassen, entweder normal oder signal-handler.
Gibt es zwei kanonische Möglichkeiten, um atomar erstellen/überprüfen Sie die Datei. Das wichtigste in diesen Tagen ist, um es zu öffnen mit der
O_EXCL
Flagge: wenn die Datei bereits existiert, schlägt der Aufruf fehl. Der alte Weg (zwingend bei Anlagen ohneO_EXCL
) ist zu erstellen, es mit einem zufälligen Namen und link, um es. Die Verbindung schlägt fehl, wenn das Ziel nicht existiert.InformationsquelleAutor der Antwort Joshua
Sehen Kerrisk ist The Linux Programming InterfaceAbschnitt 55.6 "Läuft Nur Eine Instanz eines Programms" basiert auf der PID-Implementierung in Stevens' Unix Network Programming, v2.
Beachten Sie auch, dass der Speicherort der PID-Datei ist in der Regel etwas behandelt, die von der Distribution (über ein init-Skript), so eine gut geschriebene daemon nehmen Sie ein Kommandozeilen-argument angeben, wird die PID-Datei und nicht zulassen, dass dies versehentlich überschrieben durch eine Konfigurationsdatei. Es sollte auch ordnungsgemäß zu behandeln eine veraltete pid-Datei selbst (O_EXCL sollten nicht verwendet werden). fcntl() sperren von Dateien verwendet werden soll-Sie können davon ausgehen, dass ein daemon PID-Datei liegt auf einem lokalen (nicht-NFS-Dateisystems.
InformationsquelleAutor der Antwort John Hammond
Abhängig von der distribution, die eigentlich das init-Skript, dass die Griffe der PID. Es prüft auf die Existenz ab, entfernt beim anhalten, etc. Ich weiß nicht, wie es zu tun auf diese Weise. Ich Schreibe meine eigenen init-scripts und nicht in der Regel verwenden Sie die stanard init-Funktionen.
Einem gut geschriebenen Programm (daemon) wird eine Art Konfiguration-Datei sagen, wo das pidfile (wenn überhaupt) geschrieben werden soll. Es wird auch die Pflege zu etablieren, die signal-Handler so, dass die PID-Datei ist bereinigt auf "normal" oder " abnormal beenden, Wann immer ein signal gehandhabt werden kann. Die PID-Datei gibt dann das init-Skript die korrekten PID, damit es gestoppt werden kann.
Daher, wenn die PID-Datei existiert bereits wenn Sie starten, das ist ein sehr guter Indikator, um das Programm, das es vorher abgestürzt ist und tun sollte, irgendeine Art von recovery-Aufwand (falls zutreffend). Sie Art von Schießen, die Logik in den Fuß, wenn Sie das init-Skript selbst-Kontrolle für die Existenz der PID, oder die Verknüpfung.
Soweit Raum der Namen, sollte Sie den Programm-Namen. Wenn Sie anfangen, 'foo-daemon', es wäre foo-daemon.pid
Sollten Sie auch erkunden /var/lock/subsys, jedoch ist vor allem auf Red Hat flavors.
InformationsquelleAutor der Antwort Tim Post
Den
systemd
- Paket für Red Hat 7 gibt eine man-Seitedaemon(7)
mit der header-Zeile "Schreiben und Verpackung system-daemons."Diesem Mann Seite beschreibt sowohl im "alten Stil" (SysV) und "new style" (systemd) daemonization. Im neuen Stil, systemd selbst Griffen die PID-Dateien für Sie (wenn so konfiguriert). Jedoch im alten Stil, die Menschen Seite hat dies zu sagen:
Lesen Sie auch diese Manpage online.
InformationsquelleAutor der Antwort Wildcard