Como faço para que o Apache inicialize no bootime no Linux?


32

Instalei o Apache 2 da fonte na minha caixa Linux. apachectl -k startfunciona muito bem, mas como faço para que o Apache inicie no momento da inicialização?

Isso está em uma distribuição do Red Hat Linux:

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


11
Qual distribuição?
Ayaz 01/06/09

Respostas:


46

Você deseja adicionar seu script de inicialização ao nível de execução apropriado. O script init normalmente é /etc/init.d/apache2onde você pode executar manualmente /etc/init.d/apache2 startpara iniciá-lo.

No Gentoo, você escreveria:

rc-update add apache2 default

No Ubuntu / Debian, isso funciona:

sudo update-rc.d apache2 defaults

No Red Hat Linux / Fedora / CentOS, um pouco de pesquisa mostra isso:

chkconfig --add httpd

Isso varia um pouco de distribuição para distribuição, mas a ideia geralmente é a mesma. Basicamente, todos esses comandos fazem um link simbólico da /etc/init.d/pasta em nível de execução apropriada /etc/.


11
Obrigado pela resposta que me levou a apontar na direção certa. Resumi o que fiz abaixo.
lamentar

Se você criou o apache a partir da fonte, não haverá nenhum script init, a parte que você cobriu é apenas a configuração como um serviço, uma vez que você tenha um script init configurado corretamente em /etc/init.d/ e é exatamente isso que não é ' t muito bem documentado para o Apache 2
Jaime Hablutzel

26

Aqui está o que finalmente funcionou para mim. Isso pressupõe que você é o usuário root.

  1. vi /etc/init.d/apache2 (edite-o como mostrado abaixo)
  2. chmod 755 /etc/init.d/apache2
  3. chkconfig --add apache2
  4. chkconfig --list apache2 (para verificar se funcionou)

Conteúdo de /etc/init.d/apache2:

#! / bin / bash
#
# apache2 Script de inicialização do servidor HTTP Apache
#
# chkconfig: 3 85 15
# description: Apache é um servidor da World Wide Web. É usado para servir \
# Arquivos HTML e CGI.

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

Você pode obter o nível de execução executando / sbin / runlevel, que no meu caso era 3. E é claro que você precisa chamar sua versão do apachectl, que no meu caso foi / usr / local / apache2 / bin / apachectl

Graças ao seguinte:


Eu realmente odeio aceitar minha própria resposta, mas é a que funcionou.
9449

Era exatamente disso que eu precisava! (teve que recompilar e instalar um Apache 2.2.27 em / usr / local / apache2). Muito obrigado.
Christophe Muller

esta linha "/ usr / local / apache2 / bin / apachectl $ @" realmente inicia o httpd? você precisa emitir: sudo chkconfig apache2 start ou sudo chkconfig apache2 ativado?
Olala 14/07/16

8

Verifique se você possui o httpdscript init no /etc/rc.ddiretório Se sim, você pode simplesmente executar o seguinte comando que permite que o serviço httpd seja iniciado no momento da inicialização.

chkconfig --level 345 httpd on

Se você não possui o script init, basta anexar o /etc/rc.localarquivo com apachectl -k start(o comando para iniciar o Apache).


4

Como você instalou pela fonte, não haverá um script init instalado no diretório /etc/init.d/. O binário apachectl foi projetado para ser compatível com as opções padrão de script init, assim você pode simplesmente fazer um link simbólico para ele em vez de criar um script wrapper (por exemplo, ln -s / usr / local / sbin / apachectl /etc/init.d/ apache)

Você pode seguir os procedimentos descritos nas outras postagens para adicionar links para chamar o script init nos níveis de execução corretos.

Citação: Apache Documentation http://httpd.apache.org/docs/2.2/invoking.html

Iniciando no momento da inicialização

Se você deseja que o servidor continue em execução após a reinicialização do sistema, adicione uma chamada ao apachectl nos arquivos de inicialização do sistema (normalmente rc.local ou um arquivo em um diretório rc.N). Isso iniciará o Apache como root. Antes de fazer isso, verifique se o servidor está configurado corretamente para restrições de segurança e acesso.

O script apachectl foi projetado para agir como um script init SysV padrão; pode levar os argumentos a iniciar, reiniciar e parar e convertê-los nos sinais apropriados para httpd. Assim, você pode simplesmente vincular o apachectl ao diretório init apropriado. Mas não deixe de verificar os requisitos exatos do seu sistema.


Obrigado pela resposta que me levou a apontar na direção certa. Resumi o que fiz abaixo.
lamentar

1

chkconfig --levels 345 httpd

iniciará o httpd nos níveis de execução 3,4,5.

O chkconfig --list mostrará todos os serviços e seus níveis de execução atuais de inicialização. 345 é típico para um serviço de rede.


11
Isso gera o seguinte erro comigo no CentOS 6: "apenas um nível de execução pode ser especificado para uma consulta chkconfig". No entanto, adicionar "on" ao final do comando ("chkconfig --levels 345 httpd on") funcionou como um encanto.
Akame

1

No Red Hat Linux, existe um utilitário útil chamado ntsysv, que permite selecionar quais serviços você deseja iniciar no seu nível de execução atual. Você chama também especifica qual nível de execução você deseja editar ao iniciar o utilitário --level.

Role para baixo até httpd e pressione Spacepara que uma estrela apareça na caixa à esquerda. Então Tabpara OK. Pressione Returnpara salvar e retornar ao shell.

Eu descobri que ele instala praticamente por padrão. Eu nunca estive em uma posição em que não foi instalado.

Você precisaria instalar o serviço primeiro, copiando o script de serviço para /etc/init.d e executando:

chkconfig --add <script name>

1

Depende do seu sabor do Linux. Supondo que o arquivo /etc/init.d/apache2 tenha sido criado, tente:

chkconfig -a apache2

ou

update-rc.d apache2 defaults

Um deles deve funcionar.


11
A resposta chkconfig é para Red Hat como sistemas (ou seja, CentOS) e update-rc.d é para Debian como sistemas (Ubuntu)
Kyle Brandt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.