Come faccio ad avviare Apache all'avvio al bootime su Linux?


32

Ho installato Apache 2 dal sorgente sul mio box Linux. apachectl -k startfunziona bene, ma come faccio ad avviare Apache all'avvio?

Questo è su una distribuzione di Red Hat Linux:

Linux <hostname> 2.6.9-55.ELsmp # 1 SMP ven 20 apr 17:03:35 EDT 2007 i686 i686 i386 GNU / Linux


1
Quale distribuzione?
Ayaz,

Risposte:


46

Si desidera aggiungere il suo script init al livello di esecuzione appropriato. Lo script init è in genere /etc/init.d/apache2dove è possibile eseguire manualmente /etc/init.d/apache2 startper avviarlo.

Su Gentoo scrivi:

rc-update add apache2 default

Su Ubuntu / Debian funziona:

sudo update-rc.d apache2 defaults

Su Red Hat Linux / Fedora / CentOS un po 'di googling mostra questo:

chkconfig --add httpd

Varia un po 'da una distribuzione all'altra, ma l'idea è generalmente la stessa. Fondamentalmente, tutti questi comandi creano un collegamento simbolico /etc/init.d/alla cartella appropriata a livello di esecuzione in /etc/.


1
Grazie per la risposta mi ha indicato nella giusta direzione. Ho riassunto quello che ho fatto di seguito.
addolorarsi il

Se hai creato apache dal sorgente non ci sarà alcuno script di init, la parte che hai coperto è solo la configurazione come servizio una volta che hai uno script di init correttamente impostato in /etc/init.d/ e questo è esattamente ciò che non è ' Sono davvero ben documentato per Apache 2
Jaime Hablutzel,

26

Ecco cosa finalmente ha funzionato per me. Questo presuppone che tu sia l'utente root.

  1. vi /etc/init.d/apache2 (modificalo come mostrato di seguito)
  2. chmod 755 /etc/init.d/apache2
  3. chkconfig --add apache2
  4. chkconfig --list apache2 (per verificare che abbia funzionato)

Contenuto di /etc/init.d/apache2:

#! / Bin / bash
#
# apache2 Script di avvio per Apache HTTP Server
#
# chkconfig: 3 85 15
# descrizione: Apache è un server World Wide Web. È usato per servire \
# File HTML e CGI.

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

Puoi ottenere il runlevel eseguendo / sbin / runlevel, che nel mio caso era 3. E ovviamente devi chiamare la tua versione di apachectl, che nel mio caso era / usr / local / apache2 / bin / apachectl

Grazie a quanto segue:


Odio davvero accettare la mia risposta, ma è quella che ha funzionato.
addolorarsi il

Questo era esattamente quello di cui avevo bisogno! (ha dovuto ricompilare e installare un Apache 2.2.27 in / usr / local / apache2). Molte grazie.
Christophe Muller,

questa riga "/ usr / local / apache2 / bin / apachectl $ @" avvia effettivamente httpd? devi emettere: sudo chkconfig apache2 start o sudo chkconfig apache2 on?
Olala,

8

Controlla se hai lo httpdscript init nella /etc/rc.ddirectory. Se sì, puoi semplicemente eseguire il comando seguente che consente al servizio httpd di avviarsi all'avvio.

chkconfig --level 345 httpd on

Se non hai lo script init, aggiungi semplicemente il /etc/rc.localfile con apachectl -k start(il comando per avviare Apache).


4

Come hai installato per sorgente, non ci sarà uno script di init installato nella directory /etc/init.d/. Il binario apachectl è progettato per essere compatibile con le opzioni di script init standard, quindi potresti essere in grado di collegarlo semplicemente a esso anziché creare uno script wrapper (ad esempio ln -s / usr / local / sbin / apachectl /etc/init.d/ apache)

È quindi possibile seguire le procedure descritte negli altri post per l'aggiunta di collegamenti per richiamare lo script init nei runlevel corretti.

Citation: Apache Documentation http://httpd.apache.org/docs/2.2/invoking.html

A partire dal Boot-Time

Se si desidera che il server continui a funzionare dopo il riavvio del sistema, è necessario aggiungere una chiamata a apachectl ai file di avvio del sistema (in genere rc.local o un file in una directory rc.N). Questo avvierà Apache come root. Prima di fare ciò, assicurarsi che il server sia configurato correttamente per le restrizioni di sicurezza e accesso.

Lo script apachectl è progettato per agire come uno script init SysV standard; può prendere gli argomenti start, restart, e stop e tradurli nei segnali appropriati in httpd. Quindi spesso puoi semplicemente collegare apachectl nella directory init appropriata. Assicurati di controllare i requisiti esatti del tuo sistema.


Grazie per la risposta mi ha indicato nella giusta direzione. Ho riassunto quello che ho fatto di seguito.
addolorarsi il

1

chkconfig --levels 345 httpd

inizierà httpd nei runlevel 3,4,5.

chkconfig --list mostrerà tutti i servizi e i loro runlevel di avvio correnti. 345 è tipico per un servizio di rete.


1
Questo genera il seguente errore con me su CentOS 6: "è possibile specificare un solo runlevel per una query chkconfig". Tuttavia, l'aggiunta di "on" alla fine del comando ("chkconfig --levels 345 httpd on") ha funzionato come un incantesimo.
Akame

1

Su Red Hat Linux c'è un'utilità utile chiamata ntsysv che ti permette di selezionare quali servizi vuoi iniziare nel tuo attuale livello di esecuzione. Si chiama anche specificare quale livello di esecuzione si desidera modificare quando si avvia l'utilità utilizzando --level.

Scorri verso il basso fino a httpd e premi in Spacemodo che una stella appaia nella casella a sinistra. Quindi Tabper OK. Premere Returnper salvare e tornare alla shell.

Ho scoperto che si installa praticamente per impostazione predefinita. Non sono mai stato in una posizione in cui non è stato installato.

Dovresti prima installare il servizio copiando lo script del servizio in /etc/init.d, quindi eseguendo:

chkconfig --add <script name>

1

Dipende dal tuo sapore di Linux. Supponendo che il file /etc/init.d/apache2 sia stato creato, provare:

chkconfig -a apache2

o

update-rc.d apache2 defaults

Uno di loro dovrebbe funzionare.


1
La risposta di chkconfig è per i sistemi simili a Red Hat (ovvero CentOS) e update-rc.d è per i sistemi simili a Debian (cioè Ubuntu)
Kyle Brandt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.