Startup script (init.d) for nginx

Instalei o Nginx no Suse há algum tempo e fiz isso manualmente, não sei se havia um pacote pronto, ou eu queria instalar a última versão, só sei que instalei na munheca.

Recentemente percebi (do pior jeito) que não tinha um script de inicialização instalado, a máquina foi rebootada e o Nginx não subiu.

Procurei me entender com o funcionamento dos scripts de inicialização, procurei um script pronto para o Nginx e não achei.

Então peguei um script qualquer, seguindo o modelo de parâmetros “start/stop”, adaptei para a minha necessidade e saí com o seguinte:

#! /bin/sh

# Description: Startup script for nginx.
#
# Author:  Enrico B. da Luz 

DESC="nginx"
NGINX=/usr/sbin/nginx
PIDFILE=/usr/logs/nginx.pid
CONF=/usr/conf/nginx.conf

d_start() {
  $NGINX -c $CONF || echo -en "\n$DESC already running"
}

d_stop() {
  kill -QUIT `cat $PIDFILE` || echo -en "\n$DESC not running"
}

d_restart() {
  d_stop
  sleep 2
  d_start
}

d_reload() {
  kill -HUP `cat $PIDFILE` || echo -en "\nCan't reload $DESC"
}

case "$1" in
  start)
    echo -n "Starting $DESC: $NAME"
    d_start
        echo "."
  ;;
  stop)
    echo -n "Stopping $DESC: $NAME"
    d_stop
        echo "."
  ;;
  reload)
    echo -n "Reloading $DESC configuration..."
    d_reload
        echo "."
  ;;
  restart)
    echo -n "Restarting $DESC: $NAME"
    d_restart
    echo "."
  ;;
  *)
    echo "Usage: $0 {start|stop|restart|reload}" >&2
    exit 3
  ;;
esac

exit 0

Como fiz para o Suse, segui os funcionamento dos scripts de inicialização”>padrões de caminhos e coloquei o script no “/etc/rc.d/boot.local”.

Deve funcionar para outras distribuições também, mas aconselho que se utilize um bom gerenciador de pacotes para evitar dores-de-cabeça.

Scripts na inicialização (boot): Linux / FreeBSD / Suse

Parece que cada distribuição Linux / Unix / BSD tem a sua própria maneira de executar scripts na inicialização.

Eu gostaria de ver mais padronização entre os sistemas mas não posso reclamar, é dessa diversidade e experimentação típicas do código aberto que surgem as melhores idéias.

Em geral, um script é executado no fim da inicialização, você coloca os seus próprios comandos lá e pronto. Existe um esquema de runlevels, para determinar a ordem de execução de alguns comandos, mas acho difícil um usuário comum (como eu) precisar disso, então não vou entrar em detalhes, até porque não teria muito o que falar.

Fiz aqui um apanhado dos esquemas de inicialização das poucas distribuições que eu tive contato, assim posso voltar aqui sempre que precisar:

Suse:

/etc/rc.d/boot.local

CentOS:

/etc/rc.d/rc.local

FreeBSD:

/etc/rc.conf
/etc/rc.d/*
/usr/local/etc/rc.d/*

O Suse e o CentOS usam scripts com nomes diferentes, você adiciona os seus comandos e eles serão executados no próximo boot.

No FreeBSD o rc.conf não é um script, mas sim um arquivo de configuração, você habilita os serviços que quer rodar e o sistema executa o script relacionado, que deve estar em “/etc/rc.d/” ou “/usr/local/etc/rc.d/” (ainda não entendi quando tá em um lugar ou outro).