runit e nginx

5

Estou trabalhando em um sistema cujo principal sistema de inicialização é o runit.

Infelizmente, o runit requer que qualquer aplicativo que esteja sendo executado esteja sendo executado em primeiro plano da seguinte forma:

#!/bin/bash

exec sshd -D

Vendo como o nginx não oferece uma maneira de executá-lo em primeiro plano, como posso ter o runit ainda gerenciando o nginx e ser capaz de parar, iniciar e reiniciá-lo usando os comandos sv do runit?

    
por Naftuli Kay 30.07.2014 / 02:56

2 respostas

6

Você pode usar a opção daemon off :

exec /usr/sbin/nginx -c /etc/nginx/nginx.conf  -g "daemon off;"

De wiki nginx :

You can use daemon off safely in production mode with runit / daemontools however you can't do a graceful upgrade. master_process off should never be used in production.

Quando você usa runit para controlar nginx , ele se torna o processo pai do processo mestre nginx . Mas se você tentar fazer uma atualização online, o processo nginx master irá bifurcar e executar o novo binário.

Um novo processo mestre é criado, mas como o processo mestre antigo ainda existe (porque é controlado por runit ), o pai do novo processo mestre será o processo init, porque runit não pode controlar o novo mestre mestre processo como ele não começou.

    
por 30.07.2014 / 10:30
0

Não desligue o processo mestre de nada usado no mundo real, ele não faz upgrades sem tempo de inatividade e não é suportado.

Faça o / a maneira correta usando o monitoramento de sentinela de página da porta 80, etc. para não conter algum conteúdo mágico, caso contrário o nginx não pode fazer upgrades de tempo de inatividade zero e você parecerá um amador de rank.

# . . .
set -e
## config - start - should move to another file
CONF='/etc/nginx/nginx.conf'
# TODO: grab below by parsing CONF
PROTO=http
IP=0.0.0.0
PORT=80
## config - end - should move to another file
case "$(uname | tr '[A-Z]' '[a-z]')" in
darwin|freebsd|netbsd|openbsd) NC_ARGS="-n -w 5 -z '${IP}' '${PORT}'" ;;
linux) NC_ARGS="-n -w 5 --send-only '${IP}' '${PORT}'" ;;
*) echo "unsupported os $(uname)" >&2; exit 1 ;;
esac
/usr/bin/nginx -t -c "${CONF}"
/usr/bin/nginx -c "${CONF}"
sleep 5
while /usr/bin/nc $NC_ARGS </dev/null >/dev/null 2>&1; do
  set -e # loop runs in a subshell
  /usr/bin/curl -m5 -fsS -A 'runit script/0.0.0' \
    "${PROTO}"://"${IP}":"${PORT}" | \
    /usr/bin/grep -q 'This comment is required'
  sleep 2
done
    
por 12.06.2018 / 22:09

Tags