{"id":20,"date":"2007-04-10T15:59:24","date_gmt":"2007-04-10T13:59:24","guid":{"rendered":"http:\/\/www.instruyete.org\/?p=20"},"modified":"2007-04-10T15:59:24","modified_gmt":"2007-04-10T13:59:24","slug":"daemon-handling-unter-solaris-10","status":"publish","type":"post","link":"https:\/\/www.instruyete.org\/?p=20","title":{"rendered":"daemon handling unter Solaris 10"},"content":{"rendered":"<p>In der klassischen System V Welt, d.h. auch unter Linux aber nicht unter Mac OS X, gibt es verschiedene Runlevels zu denen es jeweils ein Unterverzeichnis unterhalb \/etc gibt mit Start- und Stopscripten von Diensten.<br \/>\nStartet also der init Prozess (pid 1) auf einem System V UNIX System arbeitet er sukzessive die Startskripte dieser Verzeichnisse ab, wobei zumindest unter Linux einen Nummerierung der Startskripte die Reihenfolge der Abarbeitung festlegt.<br \/>\nEin nachtr\u00e4glicher Neustart oder das Stoppen ist jederzeit mit solch einem Skript m\u00f6glich.<\/p>\n<p>Dieses Konzept hat aber mindestens zwei Schwachstellen.<\/p>\n<ol>\n<li>Das einf\u00fcgen eines neuen Dienstes ist aufw\u00e4ndig. Neben dem allg. Start-\/Stopskript muss in jedem passenden runlevel Unterverzeichnis ein link gesetzt werden, wobei die Nummerierung oftmals nicht eindeutig sein kann.<\/li>\n<li>Es gibt keinen Supervisor \u00fcber die Dienste der im Fehlerfall eine Aktion ausl\u00f6sen k\u00f6nnte. Normalerweise wird lediglich im log Bereich protokolliert. Eine respawn Direktive kann diese Situation noch leicht verbessern.<\/li>\n<\/ol>\n<p>Sun f\u00fchrte deshalb die sog. <strong>Service Management Facility (SMF)<\/strong> ein:<br \/>\nDie Skripte der SMF basieren auf XML und l\u00f6sen die \/etc\/init.d Skripte ab.<br \/>\nEin Starten (enable) oder Stoppen (disablen) eines Dienstes ist persistent, es \u00fcberlebt einen reboot des Systems. Daher ist ein seperater Eintrag in einer inittab\/runlevel obsolet.<br \/>\nAlle so gestarteten Dienste werden von einer Art Service Masterdaemon \u00fcberwacht, dem Holderprozess <strong>svc.startd<\/strong> . Die Basis hierf\u00fcr ist ein Contract System bei der ein zu startender Dienst nebem einer klassischen PID auch eine <strong>Contract ID (CTID)<\/strong> bekommt, die direkt dem Holder Proze\u00df unterstellt ist.<br \/>\nAuch D\u00e4monen die von inetd gestartet werden, besitzen einen SMF Eintrag und werden wie ein stand-alone Dienst gestartet &#8211; der Prozess Holder ist dann allerdings inetd, der wiedersum svc.startd untersteht.<br \/>\nAlle Laufzeitinformationen werden in einer sqlite Datenbank gehalten, die einerseits effizient arbeitet andererseits eine m\u00f6gliche Quelle f\u00fcr einen Totalausfall des Systems darstellt.<\/p>\n<p><strong>Folgender genauerer \u00dcberblick \u00fcber die SMF:<\/strong><\/p>\n<ul>\n<li><strong>\/lib\/svc<\/strong> beinhaltet Administrationsprogramme f\u00fcr die SMF sowie unter &#8222;method&#8220; auch die Start-\/Stopsckripte zum einmaligen einlesen<\/li>\n<\/ul>\n<ul>\n<li><strong>\/var\/svc<\/strong> beinhaltet die eigentlichen XML Servicebeschreibungen (Manifeste). Das Manifest beinhaltet v.a. Abh\u00e4ngigkeiten gegen\u00fcber anderen Diensten und Resourcen, das Fehlerhandling sowie die Start-\/Stop Anweisungen die wiederum oft auf ein klassisches Skript in \/lib\/svc\/method verweisen<\/li>\n<\/ul>\n<ul>\n<li><strong>\/etc\/svc<\/strong> beinhalet \u00fcberraschenderweise das sqlite Repository, welches nicht unter \/var\/svc angesiedelt ist, sowie logs zum repository.<\/li>\n<\/ul>\n<p><strong>Beschreibung eines Dienstes, das Manifest:<\/strong><\/p>\n<ul>\n<li>beinhaltet den Header<\/li>\n<li>beschreibt Art und Grad der Abh\u00e4ngigkeit von anderen Diensten\/Resourcen<\/li>\n<li>enth\u00e4lt Start-\/Stop Methoden (stop meist mittels :kill definiert)<\/li>\n<li>definiert spezielle Eigenschaften<\/li>\n<li>Hinweise zu Dokumentationen<\/li>\n<\/ul>\n<p><strong>Administration von SMF:<\/strong><\/p>\n<ul>\n<li><strong>svcs<\/strong>  Service Status, listet alle Dienste des Repositories und Ihren Status auf<\/li>\n<li><strong>svcs -l <\/strong>  detaillierte Ausgabe eines Services incl. CTID der Servicename, bzw. der <em>FRMI<\/em> (Fault Managed Resource Identifier), kann in der Langform, oder in einer verk\u00fcrzten Form, falls eindeutig m\u00f6glich, angegeben werden, bspw: <em>svc:\/network\/ssh<\/em> oder auch nur <em>ssh<\/em><\/li>\n<li><strong>svcadm enable\/disable  <\/strong> ein-\/auschalten (online\/offline) eines Services<\/li>\n<li><strong>svcadm restart\/refresh <\/strong> durchstarten\/erneuern (bei leichten Konf.\u00e4nderungen)<\/li>\n<li><strong>svcprop<\/strong> liest die Eigenschaften aus dem Manifest aus<\/li>\n<li><strong>svccfg<\/strong>  Sobald ein XML Manifest einmal in das SMF Repository eingelesen ist (<em>svccfg import<\/em>) ist diese File unerheblich und nur noch das sqlite Repository ma\u00dfgebend. svccfg ist ein Tool zur Manipulation dieses Repositories.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In der klassischen System V Welt, d.h. auch unter Linux aber nicht unter Mac OS X, gibt es verschiedene Runlevels zu denen es jeweils ein Unterverzeichnis unterhalb \/etc gibt mit Start- und Stopscripten von Diensten. Startet also der init Prozess (pid 1) auf einem System V UNIX System arbeitet er sukzessive die Startskripte dieser Verzeichnisse &hellip; <a href=\"https:\/\/www.instruyete.org\/?p=20\" class=\"more-link\"><span class=\"screen-reader-text\">daemon handling unter Solaris 10<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,7],"tags":[],"class_list":["post-20","post","type-post","status-publish","format-standard","hentry","category-solaris","category-unix"],"_links":{"self":[{"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/posts\/20","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=20"}],"version-history":[{"count":0,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/posts\/20\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.instruyete.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=20"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=20"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=20"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}