Como iniciar automaticamente o supervisord no Linux (Ubuntu)

38

O Supervisord não vem com um script init ou não indica como iniciá-lo automaticamente, ie. após uma reinicialização. Eu tentei alguns scripts /etc/init.d contribuídos pelo usuário, mas todos falham.

Qual seria a solução preferida?


fonte
como assim "falhar"? btw; esta questão parece pertencer à falha do servidor.
21410 erenon
O Debian stable tem scripts init funcionando, então acho que esta questão está desatualizada.

Respostas:

40

Na verdade, eu encontrei um que funciona aqui http://gist.github.com/176149 . Para instalá-lo:

sudo curl https://gist.github.com/howthebodyworks/176149/raw/88d0d68c4af22a7474ad1d011659ea2d27e35b8d/supervisord.sh > /etc/init.d/supervisord

para executá-lo

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

e para agendá-lo automaticamente, faça

sudo update-rc.d supervisord defaults

Verifique se o pid correto está em /etc/supervisord.conf, mapeado em /etc/init.d/supervisord

example: pidfile=/var/run/supervisord.pid

Parar e começar a funcionar corretamente

service supervisord stop
service supervisord start
caesarsol
fonte
Isso é específico do debian? Faltando /lib/init/vars.sh e update-rc.d em uma caixa do
Centos6.5
1
como sabemos para onde o supervisord.conf vai? / Onde devemos colocar o supervisord.conf?
21312 Weiwei
1
Achei muito mais fácil instalar o supervisord a partir do repositório de squeeze do Debian - fazer o aptitude install supervisord inclui a configuração correta do arquivo /etc/init.d com links e coloca o arquivo de configuração em /etc/supervisor/supervisord.conf
RichVel
2
@ RichVel Essa é uma versão alfa, com muitos bugs. Talvez a maioria deles não afete seu sistema, mas você não pode ter certeza, e não ter a versão mais recente pode mordê-lo a qualquer momento. Verifique a repo fonte e você vai ver que existem mais de 320 commits entre as versões 3.0a8 e 3.0b2 github.com/Supervisor/supervisor/compare/3.0a8...3.0b2
glarrain
1
@glarrain - obrigado pelo link heads-up e comparação ... Não sabia disso - irritante porque o empacotador Debian teve um lançamento alfa. Certamente o ponto de Debian estável é só para usar versões comprovadas ...
RichVel
13

Eu criei um script inicial para o ubuntu 9.10

Por exemplo, instalei o supervisor em um ambiente virtual e inicio e controle o supervisor desde o início.

crie um arquivo de texto /etc/init/supervisord.conf

o conteúdo é:

description     "supervisord"

start on runlevel [345]
stop on runlevel [!345]

expect fork
respawn

exec /misc/home/bkc/Python_Environments/java2/supervisord/bin/supervisord -c /misc/home/bkc/Python_Environments/java2/supervisord/work/supervisord.conf

Ele iniciará automaticamente o supervisor na inicialização. Para iniciar manualmente após criar o arquivo .conf, use

sudo start supervisord

Para parar manualmente o serviço, use

sudo stop supervisord

bkc
fonte
2
Obrigado! Aqui é um one-liner: curl -L https://gist.github.com/raw/1213031/929e578faae2ad3bcb29b03d116bcb09e1932221/sup‌​ervisord.conf > /etc/init/supervisord.conf && start supervisord(você precisa ser root)
charlax
3
Sempre verifique as linhas principais do gist antes de executá-las. Este é bom, mas eu só queria adicionar essa dica.
Cory Walker
12

É isso que eu uso no RHEL 5.4 e CentOS 5.5

Não tenho certeza se depende de algumas definições de configuração no meu supervisord.conf. Mas parece funcionar bem.

Você precisa executar o seguinte comando após instalá-lo

chkconfig --add supervisord

[/etc/rc.d/init.d/supervisord]

#!/bin/sh
#
# /etc/rc.d/init.d/supervisord
#
# Supervisor is a client/server system that
# allows its users to monitor and control a
# number of processes on UNIX-like operating
# systems.
#
# chkconfig: - 64 36
# description: Supervisor Server
# processname: supervisord

# Source init functions
. /etc/rc.d/init.d/functions

prog="supervisord"

prefix="/usr/"
exec_prefix="${prefix}"
prog_bin="${exec_prefix}/bin/supervisord"
PIDFILE="/var/run/$prog.pid"

start()
{
        echo -n $"Starting $prog: "
        daemon $prog_bin --pidfile $PIDFILE
        [ -f $PIDFILE ] && success $"$prog startup" || failure $"$prog startup"
        echo
}

stop()
{
        echo -n $"Shutting down $prog: "
        [ -f $PIDFILE ] && killproc $prog || success $"$prog shutdown"
        echo
}

case "$1" in

  start)
    start
  ;;

  stop)
    stop
  ;;

  status)
        status $prog
  ;;

  restart)
    stop
    start
  ;;

  *)
    echo "Usage: $0 {start|stop|restart|status}"
  ;;

esac
Peter Lindqvist
fonte
só iria acrescentar que você precisa adicionar a + x permissões antes de tentar executá-lo: chmod + x /etc/init.d/supervisord
Grilo Falante
Não se esqueça que depois de correr chkconfig --add supervisordvocê também precisa habilitá-lo para diferentes níveis de execução viachkconfig supervisord --level 345 on
Corey Ballou
2

Isso está funcionando para mim no Ubuntu 10.04.3 LTS. Também parece funcionar no 8.04:

Adicione o seguinte a /etc/init.d/supervisord

#! /bin/bash -e

SUPERVISORD=/usr/local/bin/supervisord
PIDFILE=/tmp/supervisord.pid
OPTS="-c /etc/supervisord.conf"

test -x $SUPERVISORD || exit 0

. /lib/lsb/init-functions

export PATH="${PATH:+$PATH:}/usr/local/bin:/usr/sbin:/sbin"

case "$1" in
  start)
    log_begin_msg "Starting Supervisor daemon manager..."
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $SUPERVISORD -- $OPTS || log_end_msg 1
    log_end_msg 0
    ;;
  stop)
    log_begin_msg "Stopping Supervisor daemon manager..."
    start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE || log_end_msg 1
    log_end_msg 0
    ;;

  restart|reload|force-reload)
    log_begin_msg "Restarting Supervisor daemon manager..."
    start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $SUPERVISORD -- $OPTS || log_end_msg 1
    log_end_msg 0
    ;;

  *)
    log_success_msg "Usage: /etc/init.d/supervisor
{start|stop|reload|force-reload|restart}"
    exit 1
esac

exit 0

Então corra:

sudo chmod +x /etc/init.d/supervisord
sudo update-rc.d supervisord defaults

sudo service supervisord start

Nenhuma das outras respostas funcionou para mim.

shennyg
fonte
1

Adicionei estas linhas ao /etc/init.d/supervisord para corrigir o processamento de argumentos "stop":

do_stop()
{
    /usr/local/bin/supervisorctl stop all
    /usr/local/bin/supervisorctl shutdown
    # Return
    ...

e isso funciona muito bem para mim.

rukeba
fonte
1

O Supervisor parece estar agora no repositório apt, portanto, não deve ser necessário criar manualmente arquivos init, apenas:

sudo apt-get install supervisor

Você pode primeiro limpar (e fazer backup) dos arquivos antigos antes da instalação.

Jeff Bauer
fonte
Você precisa estar ciente de que "alguns desses pacotes podem ficar consideravelmente atrás da versão oficial do lançamento. Por exemplo, o Ubuntu 12.04 (lançado em abril de 2012) oferece um pacote baseado no Supervisor 3.0a8 (lançado em janeiro de 2010)". (da documentação do Supervisord supervisord.org/... )
glarrain