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

entristecer
fonte
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/.

Evan Teran
fonte
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:

entristecer
fonte
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).

Viky
fonte
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.

Russell Heilling
fonte
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.

elint
fonte
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>
Garry Harthill
fonte
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.

Neobyte
fonte
11
A resposta chkconfig é para Red Hat como sistemas (ou seja, CentOS) e update-rc.d é para Debian como sistemas (Ubuntu)
Kyle Brandt