Startskript wird nach Neustart unter Solaris nicht ausgeführt

Startskript wird nach Neustart unter Solaris nicht ausgeführt

Ich habe einen Befehl zum Starten von Apache, /etc/rc3.dder beim Neustart des Servers nicht ausgeführt wird. Das Skript heißt S75Apache2. Jemand hat spekuliert, dass dies daran liegt, dass der Link ein großes „A“ im Namen hat und es funktionieren könnte, wenn es in umbenannt wird S75apache2.

Kann das jemand bestätigen? Ich habe nach Dokumentation gesucht, kann aber keine Antwort finden. Ich kann das nicht wirklich testen, ohne den Server erneut neu zu starten (was ich lieber nicht tun würde).

Antwort1

Solaris-Init-Skripte sind eine Qual. Das große A spielt keine Rolle, es gibt ein Skript, /etc/rc.ddas alle Dateien findet, /etc/rc3.ddie mit „S“ beginnen, und sie in numerischer Reihenfolge ausführt.

Damit bleibt Ihnen nur noch „Mit den Grundlagen beginnen“:

  1. Ist /etc/rc3.d/S75Apache2das Set ausführbar?

  2. Enthält dieses Skript eine „#!“-Zeile? Ist die Zeile korrekt (keine nicht druckbaren Bytes usw.)?

  3. Wenn es sich um ein Bash- oder KSH-Skript handelt, führen Sie es als aus ksh -n /etc/rc3.d/S75Apache2 start. Dadurch erfahren Sie, ob es Syntaxfehler enthält.

  4. Wenn Sie das Skript als Root ausführen können, versuchen Sie es: /etc/rc3.d/S75Apache2 startund /etc/rc3.d/S75Apache2 stop überprüfen Sie sorgfältig, ob es startet httpdund stoppt httpd. Führen Sie das Skript zumindest selbst mit den Argumenten „Start“ und „Stop“ aus. Verwenden Sie , set -xum zu sehen, was das Skript zur Laufzeit macht. Überprüfen Sie, ob das, was es macht, mit dem übereinstimmt, was Sie glauben, dass es macht.

  5. Lesen Sie /etc/rc3.d/S75Apache2sorgfältig. PATHist beim Booten nur spärlich gefüllt, und Ihr Skript weiß möglicherweise beim Booten nicht, wo sich einige ausführbare Dateien befinden, aber möglicherweise, wenn es nach dem Booten ausgeführt wird. Versuchen Sie, nicht zu viel anzunehmen – Dateien, von denen Sie denken, dass sie existieren, existieren möglicherweise nicht, solche Dinge.

  6. Stellen Sie sicher, dass KnnApache2in kein Skript vorhanden ist /etc/rc3.d. Ich gehe davon aus, dass Solaris init(beispielsweise) ausgeführt wird, K76Apache2 stopwenn es von Ausführungsebene 3 auf Ausführungsebene 5 wechselt.

  7. Stellen Sie sicher, dass das Skript die Benutzer-ID entsprechend ändert. Dies ist für Apache wahrscheinlich nicht wichtig, da Ihr Skript wahrscheinlich nur apachectl startmit einigen Prologbefehlen aufgerufen wird. Wenn Sie es jedoch httpdirekt ausführen, stellen Sie sicher, dass der resultierende httpdProzess die richtige Benutzer-ID hat. Verwenden Sie sudooder etwas anderes im Skript, um es richtig zu machen.

Antwort2

Es stellte sich heraus, dass es einen Fehler im Startskript gab: Die Variable LD_LIBRARY_PATH war nicht richtig eingestellt. Das Definieren im Skript behebt das Problem.

Zur späteren Bezugnahme gibt es eine Protokolldatei, die Startmeldungen enthält, die den Fehler enthielten, der zur Lösung unseres Problems führte. Die Datei ist:

/var/svc/log/milestone-multi-user-server:default.log

Ich habe einen Verweis darauf in der Datei /etc/rc3.d/README gefunden. Ein neuer Tag, ein neuer Wissensbrocken!

Antwort3

Haben Sie Ihren eigenen Apache entwickelt (d. h. aus dem Quellcode kompiliert) oder verwenden Sie einfach den Apache, der mit Solaris 10 vorinstalliert ist?

Nun, es spielt keine Rolle, ob Sie Solaris 10 (oder höher) verwenden, wie Sie sagenSie sollten überhaupt keine Solaris-Init-Skripte verwenden, sollten Sie SMF verwenden. (ja, technisch gesehen werden Init-Skripte immer noch unterstützt, aber wie Sie sagen, sind sie lästig und SMF ist viel besser)

Um den Apache 2.2-Webserver, der mit Solaris 10 vorinstalliert ist, zu starten (jetzt und auch automatisch nach einem Neustart), gehen Sie einfach wie folgt vor:

svcadm aktivieren /network/http:apache2

Wenn Sie Ihren eigenen Apache installiert haben, müssen Sie ein SMF-Manifest erstellen, das Manifest importieren und los geht‘s. Suchen Sie einfach bei Google nach „SMF Solaris“ und Sie werden zahlreiche Rezepte finden.

verwandte Informationen