[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: dbus



Hallo,

> ich hab mal eine Frage dbus betreffend.
> Zu dem Daemon kam kürzlich ein Update, das mir auf einem Desktop-Rechner einen 
> Neustart des Systems angezeigt hat. Also kein Problem, am Abend fährst Du die 
> Kiste eh runter und am nächsten Morgen ist alles gelaufen.

> Wie schaut es aber bei einem Server aus. Muss ich den neu starten, damit dbus 
> auch auf der neuen Version läuft, oder würde es auch reichen dbus neu zu 
> starten

Für das Update von dbus reicht es, dbus neu zu starten.

ABER: bei dem aktuellem Update ist auch die libdbus ausgetauscht worden.
Hierfür muss man alle Prozesse neu starten, die diese Lib dynamisch linken.
Debian kann zwar in begrenztem Umfang Dienste erkennen, bei denen das der
Fall ist, und diese neu starten. Aber es können auch Programme betroffen
sein, die von Hand gestartet wurden und kein Start-/Stoppskript haben.

Man kann diese Prozesse über das /proc Filesystem finden. Aber einfacher ist
es, den Server zu rebooten.

> (vor Allem, was passiert da)?

Der Neustart von dbus dürfte auf einem Server keine großen Auswirkungen
haben. dbus steht halt ein paar Sekundenbruchteile nicht zur Verfügung, u.U.
geht ein in dieser Zeit eintreffendes Ereignis verloren. dbus wird
hauptsächlich von Desktop-Umgebungen benutzt, im Serverumfeld ist das eher
wenig verbreitet.

> In anbetracht, der neueren Kernel-Entwicklungen, dass Kernel-Patches in 
> Zukunft auch ohne Neustart möglich sein sollten, kommt mir die Sache mit dbus 
> irgendwie wie ein Anachronismus (ich möche hier nur unterschwellig einfließen 
> lassen, dass mich das an Windows erinnert ;-((  ) vor.

Das hat sich ja vielleicht bald erledigt, wenn dbus durch kdbus ersetzt
worden ist. ;-)

Aber im Ernst, es gibt keinen generischen Mechanismus, mit dem man von außen
einem laufenden Prozess seine Shared Libraries austauschen kann. Und da der
Prozess mit den Libs den virtuellen Adressraum teilt und beliebig Pointer
auf Funktionen oder Datenstrukturen der Lib speichern kann, ist ein solcher
Mechanismus auch schwer vorstellbar. Aber es gibt durchaus Wege, mit denen sich
ein Serverdienst neu starten kann, ohne dass ein Request verloren geht.

Ein Beispiel, wie sowas geht, kann man hier nachlesen:
http://grisha.org/blog/2014/06/03/graceful-restart-in-golang/
Der Artikel bezieht sich auf Go, aber der Mechanismus funktioniert auch mit
anderen Sprachen.

Gruß, Harald


Reply to: