O Nginx não iniciará desde o upgrade do Ubuntu (16.04)

3

Atualizei recentemente meu servidor Ubuntu para a versão 16.04. Desde então, não consigo iniciar o serviço nginx.

Resultados de service nginx restart :

Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

O que meu sistema registra diz ( cat /var/log/syslog ):

May 20 17:03:53: Stopped A high performance web server and a reverse proxy server.
May 20 17:03:53: Starting A high performance web server and a reverse proxy server...
May 20 17:03:53: nginx.service: Failed at step EXEC spawning /usr/sbin/nginx: No such file or directory
May 20 17:03:53: nginx.service: Control process exited, code=exited status=203
May 20 17:03:53: Failed to start A high performance web server and a reverse proxy server.
May 20 17:03:53: nginx.service: Unit entered failed state.
May 20 17:03:53: nginx.service: Failed with result 'exit-code'.

Resultados de cat /lib/systemd/system/nginx.service :

# Stop dance for nginx
# =======================
#
# ExecStop sends SIGSTOP (graceful stop) to the nginx process.
# If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control
# and sends SIGTERM (fast shutdown) to the main process.
# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends
# SIGKILL to all the remaining processes in the process group (KillMode=mixed).
#
# nginx signals reference doc:
# http://nginx.org/en/docs/control.html
#
[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
# Use TERM instead of QUIT to prevent Nginx from leaving stale Unix socket and failing the next start (https://trac.nginx.org/nginx/ticket/753)
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry TERM/5 --pidfile /run/nginx.pid
# Give Passenger a chance to clean up before being killed by systemd.
ExecStop=/bin/sleep 1
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

Não há realmente nenhum arquivo em /usr/sbin/nginx , então eu tentei apt install nginx , mas aqui está o resultado:

Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 nginx : Depends: nginx-core (>= 1.10.0-0ubuntu0.16.04.4) but it is not going to be installed or
                  nginx-full (>= 1.10.0-0ubuntu0.16.04.4) but it is not going to be installed or
                  nginx-light (>= 1.10.0-0ubuntu0.16.04.4) but it is not going to be installed or
                  nginx-extras (>= 1.10.0-0ubuntu0.16.04.4) but it is not going to be installed
         Depends: nginx-core (< 1.10.0-0ubuntu0.16.04.4.1~) but it is not going to be installed or
                  nginx-full (< 1.10.0-0ubuntu0.16.04.4.1~) but it is not going to be installed or
                  nginx-light (< 1.10.0-0ubuntu0.16.04.4.1~) but it is not going to be installed or
                  nginx-extras (< 1.10.0-0ubuntu0.16.04.4.1~) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Como um novato, estou bastante perdido nessa confusão e realmente preciso de um pouco de ajuda.

Muito obrigado pelo seu tempo.

Atualização 1:

Resultados de apt-cache policy nginx :

nginx:
  Installed: 1.12.0-1+xenial1
  Candidate: 1.12.0-1+xenial1
  Version table:
 *** 1.12.0-1+xenial1 500
        500 http://ppa.launchpad.net/nginx/stable/ubuntu xenial/main amd64 Packages
        500 http://ppa.launchpad.net/nginx/stable/ubuntu xenial/main i386 Packages
        100 /home/var/lib/dpkg/status
     1.10.0-0ubuntu0.16.04.4 500
        500 http://ubuntu.mirrors.ovh.net/ftp.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        500 http://ubuntu.mirrors.ovh.net/ftp.ubuntu.com/ubuntu xenial-updates/main i386 Packages
        500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu xenial-security/main i386 Packages
     1.9.15-0ubuntu1 500
        500 http://ubuntu.mirrors.ovh.net/ftp.ubuntu.com/ubuntu xenial/main amd64 Packages
        500 http://ubuntu.mirrors.ovh.net/ftp.ubuntu.com/ubuntu xenial/main i386 Packages
    
por William Mai 20.05.2017 / 17:33

1 resposta

4

Então você tem duas coisas que estão em conflito e levaram parece que os binários do nginx vão embora de alguma forma: a versão do repositório Xenial e o NGINX PPA. Como mantenedor de ambos, permita-me explicar o conflito.

No Xenial, lançamos o 1.10.0 logo após o lançamento como uma atualização. Essa atualização nos levou a uma ramificação 'estável', mas não tinha módulos carregáveis dinamicamente construídos e disponibilizados. Isso ocorreu devido ao tempo, mas também gerou conflitos que surgiram durante os testes. Nós finalmente trabalhamos com suporte a módulos dinâmicos, em Zesty.

No PPA, sempre clonamos diretamente do Debian. Isso significa que sempre tivemos o suporte a 'módulo dinâmico' do Debian, o que conflitou com os pacotes do Xenial e resultou em alguns conflitos de instalação e atualização.

Há um pequeno conflito aqui - você não pode misturar-e-combinar nginx-core (que é o sabor padrão instalado para o pacote nginx no Ubuntu) e os PPAs, pois às vezes isso faz as coisas desaparecerem. O problema aqui, então, é que precisamos remover o pacote existente do Ubuntu e depois instalar somente a partir do PPA.

Para resolver isso, primeiro você precisa fazer o backup de suas configurações do nginx que deseja manter para seus sites. Isto é, faça uma cópia do seu diretório / etc / nginx / sites-available / em algum outro lugar (até mesmo no diretório home do seu usuário, nós só precisamos de uma cópia das configurações do site). Além disso, precisaremos de um backup dos dados do seu site, então copie isso para outro lugar também (NÃO no docroot padrão, para que ele não fique bagunçado).

Depois de fazer a cópia, você terá que remover os pacotes nginx existentes. Isso pode ser feito com o seguinte comando:

sudo apt-get remove nginx nginx-common nginx-doc nginx-core nginx-full nginx-extras nginx-light

Quando isso estiver concluído, execute sudo apt-get update novamente apenas para garantir que tenhamos as mais atualizadas numerações de versão.

Em seguida, instale nginx do PPA - sudo apt-get install nginx nginx-full nginx-common deve fazer isso.

Você não deve mais estar recebendo falhas para iniciar erros. Certifique-se de que as configurações do seu site ainda estão no lugar e não foram sobrescritas. Em caso afirmativo, restaure os backups que fizemos anteriormente da configuração do site e dos dados do site. Caso contrário, está tudo pronto.

    
por Thomas Ward 20.05.2017 / 17:58

Tags