script init.d Nginx

5

Depois de um dist-upgrade na minha máquina debian ontem, estou tendo alguns problemas com o script init do nginx. Sempre que tento iniciar o nginx usando o script de inicialização, aparece uma mensagem de erro:

# service nginx start
Job for nginx.service failed. See 'systemctl status nginx.service' and 'journalctl -xn' for details.

Saída do sistema ntx.service do statusctl:

# systemctl status nginx.service
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
   Active: failed (Result: exit-code) since Tue 2015-05-19 12:36:12 CEST; 7s ago
  Process: 14087 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 14126 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=203/EXEC)

Saída do journalctl -xn:

# journalctl -xn
systemd[1]: nginx.service never wrote its PID file. Failing.
systemd[1]: Failed to start A high performance web server and a reverse proxy server.
-- Subject: Unit nginx.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit nginx.service has failed.
--
-- The result is failed.
systemd[1]: Unit nginx.service entered failed state.
systemd[14126]: Failed at step EXEC spawning /usr/sbin/nginx: No such file or directory
-- Subject: Process /usr/sbin/nginx could not be executed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- The process /usr/sbin/nginx could not be executed and failed.
--
-- The error number returned while executing this process is 2.
systemd[1]: nginx.service: control process exited, code=exited status=203
systemd[1]: Failed to start A high performance web server and a reverse proxy server.
-- Subject: Unit nginx.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit nginx.service has failed.
--
-- The result is failed.
systemd[1]: Unit nginx.service entered failed state.

meu arquivo nginx no init.d:

#! /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

. /lib/lsb/init-functions

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

exit 0

O arquivo daemon nginx está localizado em /usr/local/sbin/nginx (eu o compilei lá).

Coisas que tentei até agora: Eu copiei o arquivo daemon /usr/local/sbin/nginx para /usr/sbin/nginx

Quando eu uso service nginx start , ele pára no nginx inicial. Quando tento me conectar à porta 80, ele funciona. Então, continuei editando meu script de inicialização e alterei PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin para PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/sbin:/usr/bin . Isso, no entanto, deu o mesmo resultado.

Ainda não tentei mais nada.

    
por Sander Koenders 19.05.2015 / 12:49

2 respostas

1

my nginx file in init.d:

… é inteiramente irrelevante . Veja a saída de systemctl . Ele informou exatamente o arquivo a ser analisado:

Loaded: loaded (/lib/systemd/system/nginx.service; enabled)

Essa é sua unidade de serviço. E systemctl está informando o que essa unidade de serviço configurou para preparar o serviço:

 Process: 14126 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=203/EXEC)

Isso é o que você encontrará na configuração ExecStartPre na unidade de serviço. Você perceberá que PATH também é totalmente irrelevante (que é por design no systemd). A revista foi ainda mais explícita sobre o que aconteceu:

systemd[14126]: Failed at step EXEC spawning /usr/sbin/nginx: No such file or directory

Qualquer que seja a sua opinião, o computador pensa que, no momento em que você tentou iniciar o serviço, /usr/sbin/nginx não pôde ser executado como um programa porque não existia nenhum arquivo com esse nome.

Meu palpite é que você tem uma configuração RootDirectory em sua unidade de serviço e copiou o arquivo para o /usr/sbin que não está no ambiente raiz alterado ou em algum compartilhamento auxiliar As bibliotecas necessárias para carregar a imagem do programa estão ausentes do ambiente raiz alterado.

    
por 19.05.2015 / 19:16
0

Eu tive o mesmo problema no debian 8. Para mim eu acho

[date] debian systemd[1]: nginx.service never wrote its PID file. Failing.

em / var / log / syslog, que é semelhante à pergunta

# journalctl -xn
systemd[1]: nginx.service never wrote its PID file. Failing.

A razão é que em /lib/systemd/system/nginx.service eu tenho

PIDFile=/var/run/nginx.pid

Mas como o nginx é construído, ele escreve pid em /usr/local/nginx/log/nginx.pid

A correção é alterar / adicionar a linha em /usr/local/nginx/conf/nginx.conf

pid        /var/run/nginx.pid;
    
por 01.02.2016 / 08:00