Iniciar o Nginx na inicialização

11

Consegui instalar e executar o nginx e o passageiro, mas não consigo instalar o nginx sempre que reiniciar o servidor. Para iniciar o processo nginx, basta digitar sudo / opt / nginx / sbin / nginx . Pelo que entendi, qualquer coisa que eu colocar no /etc/init.d com o ubuntu hardy será executada. Alguém conhece o comando que imitará essa chamada de linha de comando?

sudo / opt / nginx / sbin / nginx


fonte
se você instalar o nginx via apt-get install nginx, então é "automaticamente" começa no momento da inicialização (mas não auto iniciar-se, inicialmente, estranho ...)
rogerdpack

Respostas:

10

Obrigado pela informação, se alguém quiser instruções passo a passo. Vá para /etc/init.d e execute sudo nano nginx-passenger.sh, depois cole neste código:

#!/bin/bash
# this script starts the nginx process attached to passenger
sudo /opt/nginx/sbin/nginx

salvar e sair. Torne o arquivo executável digitando sudo chmod +x /etc/init.d/nginx-passenger.sh. Você pode testar para ver se o script funciona, digitando sudo /etc/init.d/nginx-passenger.shisso executará todo o código no script. Verifique se ele inicia o nginx antes de continuar.

Em seguida, execute sudo update-rc.d nginx-passenger.sh defaultsainda no diretório /etc/init.d. Quando tudo isso estiver no lugar, reinicie o servidor e o ngnix deve ser gerado automaticamente na inicialização

Paulo Freitas
fonte
Obrigado pelas instruções diretas. É para isso que serve o StackExchange.
Ryan
9

/etc/init.d é apenas o local para os scripts de inicialização residirem. Mas ter um script lá não faz nada automaticamente.

O sistema init usa os links simbólicos nos diretórios /etc/rc#.d para os scripts na pasta /etc/init.d. O nome do link simbólico precisa começar com um S para executar o script com a opção start e K para executar a opção stop seguida por um número de prioridade e, em seguida, pelo nome do script.

Consulte o seguinte para obter mais informações
/etc/init.d/README
/etc/rc1.d/README
/etc/rc2.d/README

Como alternativa, você pode colocar o comando que deseja executar no script /etc/rc.local, que é executado após o sistema inicializar e concluir a execução de todos os scripts na pasta /etc/rc2.d/.

3dinfluence
fonte
1
Mas o arquivo /etc/init.d/README instrui você a usar o comando update-rc.d para criar links simbólicos no /etc/rc?.d, portanto a resposta acima apenas permite que você saiba o que esse comando está fazendo. E você pode executar o man update-rc.d para obter mais informações sobre o comando update-rc.d.
3dinfluence
heh parece que a página de manual de comando update-rc.d sugere que você deve usar sysv-rc-conf ou bum para gerenciar os scripts init sendo executados em vários níveis de execução. Acho que vou registrar um bug no arquivo /etc/init.d/README
3dinfluence
Parece que já foi corrigido na próxima versão do Ubuntu. A página de manual update-rc.d não sugere mais sysv-rc-conf ou bum.
3dinfluence
5

Para iniciar o nginx na inicialização: sudo systemctl enable nginx (não o inicia imediatamente)

Para iniciar o nginx: sudo system start nginx

Ben B
fonte
Ah, a resposta moderna (moderna a partir de 2019). Bem-vindo ao site ButterHub :)
kubanczyk
Obrigado @kubanczyk :)
Ben B
2

Estou assumindo que você instalou o nginx

Se você tiver o nginx em execução, pare o processo usando:

  • sudo killcat /usr/local/nginx/logs/nginx.pid

Script inicial

O script mostrado abaixo é de uma instalação do Ubuntu 10.04 e foi adaptado para levar em conta nossa instalação personalizada do nginx. Por favor, crie o script:

sudo nano /etc/init.d/nginx

Dentro do arquivo em branco, coloque o seguinte:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO


PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
        . /etc/default/nginx
fi

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                --exec $DAEMON
        echo "$NAME."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile \
                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  reload)
      echo -n "Reloading $DESC configuration: "
      start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
          --exec $DAEMON
      echo "$NAME."
      ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

Executar Como o arquivo init é um script de shell, ele precisa ter permissões de executáveis.

Nós os definimos assim:

sudo chmod +x /etc/init.d/nginx

update-rc Agora que temos o script base preparado, precisamos adicioná-lo aos níveis de execução padrão:

sudo /usr/sbin/update-rc.d -f nginx defaults 

A saída será semelhante a esta:

sudo /usr/sbin/update-rc.d -f nginx defaults
 Adding system startup for /etc/init.d/nginx ...
   /etc/rc0.d/K20nginx -> ../init.d/nginx
   /etc/rc1.d/K20nginx -> ../init.d/nginx
   /etc/rc6.d/K20nginx -> ../init.d/nginx
   /etc/rc2.d/S20nginx -> ../init.d/nginx
   /etc/rc3.d/S20nginx -> ../init.d/nginx
   /etc/rc4.d/S20nginx -> ../init.d/nginx
   /etc/rc5.d/S20nginx -> ../init.d/nginx

Agora podemos iniciar, parar e reiniciar o nginx, como em qualquer outro serviço:

sudo /etc/init.d/nginx start
...
sudo /etc/init.d/nginx stop
...
sudo /etc/init.d/nginx restart

O script também será chamado em uma reinicialização para que o nginx seja iniciado automaticamente.

Pankaj Sonawane
fonte
1
Eu descobri com o ubuntu 17.10 que eu precisava sudo systemctl enable nginxde dentro do /etc/init.ddiretório.
Erik