Как автоматически запустить супервизор в Linux (Ubuntu)

38

Supervisord не поставляется со скриптом инициализации или не указывает, как его запустить автоматически, т.е. после перезагрузки. Я пробовал несколько пользовательских /etc/init.d скриптов, но все они терпят неудачу.

Какое решение было бы предпочтительным?


источник
как вы имеете в виду "потерпеть неудачу"? кстати, этот вопрос, кажется, относится к serverfault.
Эренон
В стабильной версии Debian есть рабочие сценарии инициализации, поэтому я думаю, что этот вопрос устарел.

Ответы:

40

На самом деле, я нашел один, который работает здесь http://gist.github.com/176149 . Чтобы установить его:

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

запустить его

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

и автоматически запланировать это, сделать

sudo update-rc.d supervisord defaults

Убедитесь, что в /etc/supervisord.conf указан правильный pid, который отображается в /etc/init.d/supervisord.

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

Остановись и начни работать правильно

service supervisord stop
service supervisord start
caesarsol
источник
Это специфично для Debian? Отсутствует /lib/init/vars.sh и update-rc.d на коробке
Centos6.5
1
как мы узнаем, куда идет supervisord.conf? / Где мы должны поместить supervisord.conf?
Вейвэй
1
Я обнаружил, что гораздо проще просто установить supervisord из репозитория Debian squeeze - выполнение superptord установки aptitude включает в себя правильную настройку файла /etc/init.d со ссылками и помещает файл конфигурации в /etc/supervisor/supervisord.conf
RichVel
2
@RichVel Это альфа-версия со множеством ошибок. Может быть, большинство из них не влияют на вашу систему, но вы не можете быть уверены, и отсутствие последней версии может укусить вас в любой момент. Проверьте исходный репозиторий, и вы увидите, что между версиями 3.0a8 и 3.0b2 существует более 320 коммитов github.com/Supervisor/supervisor/compare/3.0a8...3.0b2
glarrain
1
@glarrain - спасибо за хедз-ап и ссылку для сравнения ... Не осознавал этого - досадно, что упаковщик Debian принял альфа-релиз. Конечно, цель стабильной работы Debian - использовать только проверенные версии ...
RichVel
13

Я создал сценарий выскочки для Ubuntu 9.10

Например, я установил супервизор в виртуальную среду, затем запустил и управлял супервизором из upstart.

создать текстовый файл /etc/init/supervisord.conf

содержание:

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

Он автоматически запустит супервизор при загрузке. Чтобы запустить вручную после создания файла .conf, используйте

sudo start supervisord

Чтобы вручную остановить службу, используйте

sudo stop supervisord

BKC
источник
2
Благодарность! Вот одна curl -L https://gist.github.com/raw/1213031/929e578faae2ad3bcb29b03d116bcb09e1932221/sup‌​ervisord.conf > /etc/init/supervisord.conf && start supervisord
строка
3
Всегда проверяйте гист однострочники, прежде чем запускать их. Это хорошо, но я просто хотел добавить этот совет.
Кори Уокер
12

Это то, что я использую на RHEL 5.4 и CentOS 5.5

Я не уверен, зависит ли это от некоторых параметров конфигурации в моем supervisord.conf. Но, похоже, работает хорошо.

Вам нужно запустить следующую команду после ее установки

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
Питер Линдквист
источник
Я бы добавил, что вам нужно добавить + x разрешений, прежде чем пытаться запустить его: chmod + x /etc/init.d/supervisord
JiminyCricket
Не забывайте, что после запуска chkconfig --add supervisordвам также нужно включить его для разных уровней запуска черезchkconfig supervisord --level 345 on
Corey Ballou
2

Это работает для меня на Ubuntu 10.04.3 LTS. Это также, кажется, работает в 8.04:

Добавьте следующее к /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

Затем запустите:

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

sudo service supervisord start

Ни один из других ответов не работал для меня.

shennyg
источник
1

Я добавил эти строки в /etc/init.d/supervisord, чтобы исправить «остановку» обработки аргументов:

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

и это прекрасно работает для меня.

Рукеба
источник
1

Похоже, что Supervisor находится в репозитории apt, поэтому нет необходимости создавать вручную файлы инициализации, просто:

sudo apt-get install supervisor

Вы можете сначала очистить (и сделать резервную копию) ваши старые файлы перед установкой.

Джефф Бауэр
источник
Вы должны знать, что «некоторые из этих пакетов могут значительно отставать от официальной версии релиза. Например, Ubuntu 12.04 (выпущенный в апреле 2012 г.) предлагает пакет на основе Supervisor 3.0a8 (выпущенный в январе 2010 г.)». (из документации супервизора supervisord.org/… )
glarrain