Ich habe einen Befehl zum Starten von Apache, /etc/rc3.d
der 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.d
das alle Dateien findet, /etc/rc3.d
die mit „S“ beginnen, und sie in numerischer Reihenfolge ausführt.
Damit bleibt Ihnen nur noch „Mit den Grundlagen beginnen“:
Ist
/etc/rc3.d/S75Apache2
das Set ausführbar?Enthält dieses Skript eine „#!“-Zeile? Ist die Zeile korrekt (keine nicht druckbaren Bytes usw.)?
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.Wenn Sie das Skript als Root ausführen können, versuchen Sie es:
/etc/rc3.d/S75Apache2 start
und/etc/rc3.d/S75Apache2 stop
überprüfen Sie sorgfältig, ob es startethttpd
und stoppthttpd
. Führen Sie das Skript zumindest selbst mit den Argumenten „Start“ und „Stop“ aus. Verwenden Sie ,set -x
um 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.Lesen Sie
/etc/rc3.d/S75Apache2
sorgfältig.PATH
ist 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.Stellen Sie sicher, dass
KnnApache2
in kein Skript vorhanden ist/etc/rc3.d
. Ich gehe davon aus, dass Solarisinit
(beispielsweise) ausgeführt wird,K76Apache2 stop
wenn es von Ausführungsebene 3 auf Ausführungsebene 5 wechselt.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 start
mit einigen Prologbefehlen aufgerufen wird. Wenn Sie es jedochhttp
direkt ausführen, stellen Sie sicher, dass der resultierendehttpd
Prozess die richtige Benutzer-ID hat. Verwenden Siesudo
oder 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.