Wie bringe ich Apache dazu, beim Booten unter Linux zu starten?

32

Ich habe Apache 2 von der Quelle auf meiner Linux-Box installiert. apachectl -k startfunktioniert einwandfrei, aber wie bekomme ich Apache zum Startzeitpunkt?

Dies ist eine Red Hat Linux-Distribution:

Linux <Hostname> 2.6.9-55.ELsmp # 1 SMP Fr 20 Apr 17:03:35 EDT 2007 i686 i686 i386 GNU / Linux

trauern
quelle
1
Welche Distribution?
Ayaz

Antworten:

46

Sie möchten das Init-Skript der entsprechenden Ausführungsebene hinzufügen. Das Init-Skript kann normalerweise /etc/init.d/apache2manuell ausgeführt werden /etc/init.d/apache2 start, um es zu starten.

Auf Gentoo würden Sie schreiben:

rc-update add apache2 default

Unter Ubuntu / Debian funktioniert das:

sudo update-rc.d apache2 defaults

Unter Red Hat Linux / Fedora / CentOS zeigt ein bisschen googeln Folgendes:

chkconfig --add httpd

Es variiert ein wenig von Verteilung zu Verteilung, aber die Idee ist normalerweise dieselbe. Grundsätzlich stellen alle diese Befehle eine symbolische Verknüpfung /etc/init.d/zum entsprechenden Run-Level-Ordner in her /etc/.

Evan Teran
quelle
1
Danke für die Antwort, die mich in die richtige Richtung geführt hat. Ich habe unten zusammengefasst, was ich getan habe.
Trauer
Wenn Sie Apache aus dem Quellcode erstellt haben, wird es kein Init-Skript geben. Der Teil, den Sie behandelt haben, ist nur die Konfiguration als Dienst, sobald Sie ein Init-Skript korrekt in /etc/init.d/ eingerichtet haben. Es ist wirklich gut dokumentiert für Apache 2
Jaime Hablutzel
26

Hier ist, was endlich für mich gearbeitet hat. Dies setzt voraus, dass Sie der Root-Benutzer sind.

  1. vi /etc/init.d/apache2 (bearbeiten Sie es wie unten gezeigt)
  2. chmod 755 /etc/init.d/apache2
  3. chkconfig --add apache2
  4. chkconfig --list apache2 (um zu überprüfen, ob es funktioniert hat)

Inhalt von /etc/init.d/apache2:

#! / bin / bash
#
# apache2 Startskript für den Apache HTTP Server
#
# chkconfig: 3 85 15
# description: Apache ist ein World Wide Web-Server. Es wird verwendet, um zu dienen \
# HTML-Dateien und CGI.

/ usr / local / apache2 / bin / apachectl $ @

Sie können den Runlevel durch Ausführen von / sbin / runlevel abrufen, was in meinem Fall 3 war. Und natürlich müssen Sie Ihre Version von apachectl aufrufen, was in meinem Fall / usr / local / apache2 / bin / apachectl war

Vielen Dank an:

trauern
quelle
Ich hasse es wirklich, meine eigene Antwort zu akzeptieren, aber es ist die, die funktioniert hat.
Trauer
Genau das habe ich gebraucht! (musste einen 2.2.27 Apache in / usr / local / apache2 neu kompilieren und installieren). Vielen Dank.
Christophe Muller
Startet diese Zeile "/ usr / local / apache2 / bin / apachectl $ @" tatsächlich httpd? Müssen Sie Folgendes ausgeben: sudo chkconfig apache2 start oder sudo chkconfig apache2 on?
Olala
8

Überprüfen Sie, ob Sie das httpdInit-Skript im /etc/rc.dVerzeichnis haben. Wenn ja, können Sie einfach den folgenden Befehl ausführen, mit dem der httpd- Dienst zum Startzeitpunkt gestartet werden kann.

chkconfig --level 345 httpd on

Wenn Sie das Init-Skript nicht haben, hängen Sie die /etc/rc.localDatei einfach mit apachectl -k start(dem Befehl zum Starten von Apache) an.

Viky
quelle
4

Da Sie nach Quelle installiert haben, wird im Verzeichnis /etc/init.d/ kein Init-Skript installiert. Die Apachectl-Binärdatei ist so konzipiert, dass sie mit Standard-Init-Skriptoptionen kompatibel ist, sodass Sie möglicherweise einfach einen Link zu ihr erstellen können, anstatt ein Wrapper-Skript zu erstellen (z. B. ln -s / usr / local / sbin / apachectl /etc/init.d/). Apache)

Sie können dann die in den anderen Beiträgen beschriebenen Verfahren zum Hinzufügen von Links ausführen, um das Init-Skript in den richtigen Runleveln aufzurufen.

Zitat: Apache-Dokumentation http://httpd.apache.org/docs/2.2/invoking.html

Ab der Startzeit

Wenn Ihr Server nach einem Systemneustart weiter ausgeführt werden soll, sollten Sie einen Aufruf von apachectl zu Ihren Systemstartdateien hinzufügen (normalerweise rc.local oder eine Datei in einem rc.N-Verzeichnis). Dies startet Apache als root. Stellen Sie zuvor sicher, dass Ihr Server für Sicherheits- und Zugriffsbeschränkungen ordnungsgemäß konfiguriert ist.

Das Apachectl-Skript ist so konzipiert, dass es sich wie ein Standard-SysV-Init-Skript verhält. Es kann die Argumente starten, neu starten und stoppen und sie in die entsprechenden Signale für httpd übersetzen. So können Sie oft einfach apachectl in das entsprechende init-Verzeichnis verlinken. Überprüfen Sie jedoch unbedingt die genauen Anforderungen Ihres Systems.

Russell Heilling
quelle
Danke für die Antwort, die mich in die richtige Richtung geführt hat. Ich habe unten zusammengefasst, was ich getan habe.
Trauer
1

chkconfig --levels 345 httpd

startet httpd in runlevels 3,4,5.

chkconfig --list zeigt alle Dienste und ihre aktuellen Start-Runlevel an. 345 ist typisch für einen Netzwerkdienst.

elint
quelle
1
Dies erzeugt unter CentOS 6 den folgenden Fehler: "Für eine chkconfig-Abfrage darf nur ein Runlevel angegeben werden". Das Hinzufügen von "on" am Ende des Befehls ("chkconfig --levels 345 httpd on") funktionierte jedoch wie ein Zauber.
Akame
1

Unter Red Hat Linux gibt es ein nützliches Hilfsprogramm namens ntsysv, mit dem Sie auswählen können, welche Dienste Sie in Ihrem aktuellen Runlevel starten möchten. Sie rufen auch auf, welche Ausführungsebene Sie bearbeiten möchten, wenn Sie das Dienstprogramm mit starten --level.

Scrollen Sie nach unten zu httpd und drücken Sie, Spacedamit ein Stern im linken Feld angezeigt wird. Dann Tabzu OK. Drücken Sie Return, um zu speichern und zur Shell zurückzukehren.

Ich habe festgestellt, dass es so ziemlich standardmäßig installiert wird. Ich war noch nie in einer Position, in der es nicht installiert war.

Sie müssen den Dienst jedoch zuerst installieren, indem Sie das Dienstskript in /etc/init.d kopieren und dann ausführen:

chkconfig --add <script name>
Garry Harthill
quelle
1

Es hängt von Ihrem Linux-Geschmack ab. Angenommen, die Datei /etc/init.d/apache2 wurde erstellt, versuchen Sie Folgendes:

chkconfig -a apache2

oder

update-rc.d apache2 defaults

Einer von ihnen sollte funktionieren.

Neobyte
quelle
1
Die chkconfig-Antwort ist für Red-Hat-ähnliche Systeme (dh CentOS) und update-rc.d ist für Debian-ähnliche Systeme (dh Ubuntu)
Kyle Brandt