kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Ross
Ross
Вопрос

Перезапуск процессов экземпляра Upstart

Я запускаю несколько экземпляров рабочего, как описано в этом ответе: https://stackoverflow.com/questions/8681974/starting-multiple-upstart-instances-automatically.

** Вопрос: Могу ли я перезапустить все экземпляры одновременно?

Для запуска рабочих я могу сделать следующее:

initctl start my-workers

Что затем позволит мне сделать:

initctl status worker N=1 worker (1) start/running, process 551

initctl status worker N=2 worker (2) start/running, process 552

Есть ли способ сделать что-то подобное:

initctl restart my-workers

Я хотел бы иметь возможность перезапускать все экземпляры без необходимости знать, сколько из них запущено.

Вот мой файл my-workers.conf

start on stopped cloud-init
stop on shutdown

env NUM_WORKERS=4

script
  for i in `seq 1 $NUM_WORKERS`
    do
      start worker N=$i
    done
end script

И worker.conf

stop on shutdown

chdir /path/to/current

respawn

instance $N

script
  exec su -c "/home/worker/.rvm/bin/rvm-shell -c 'bundle exec rake work 2>&1 >> /var/log/worker-$N.log'" worker
end script
30 2012-08-23T02:39:36+00:00 4
 Community
Community
Редактировал вопрос 23-го мая 2017 в 12:01
Программирование
ubuntu
upstart
Решение / Ответ
 SpamapS
SpamapS
7-го сентября 2012 в 5:33
2012-09-07T17:33:18+00:00
Дополнительно
Источник
Редактировать
#17021931

В файле worker.conf вам просто нужно изменить эту строку:

stop on shutdown

To:

stop on stopping my-workers

И измените my-workers.conf, чтобы использовать pre-start вместо script:

pre-start script
  for i in `seq 1 $NUM_WORKERS`
  do
    start worker N=$i
  done
end script

Теперь my-workers будет сохранять состояние: поскольку работа происходит в pre-start, главный процесс my-workers не будет существовать и поэтому не выйдет. stop on stopping my-workers заставляет рабочих останавливаться всякий раз, когда останавливается my-workers. Затем, конечно, когда он снова запустится, он снова запустит рабочих.

(К вашему сведению, stop on shutdown ничего не делает, поскольку shutdown не является системным событием. man upstart-events для всех определенных событий), поэтому вы также должны изменить my-workers на stop on runlevel [06].

 phs
phs
Редактировал ответ 21-го декабря 2013 в 9:43
36
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
 Foobar
Foobar
21-го ноября 2012 в 2:31
2012-11-21T14:31:05+00:00
Дополнительно
Источник
Редактировать
#17021932

Я попробовал это с примером, приведенным выше, и получил ответ SpamapS:

init: my-workers pre-start process (22955) terminated with status 127

В /var/log/upstart/my-workers.log я нашел проблему:

/proc/self/fd/9: 6: /proc/self/fd/9: end: not found

В конец цикла for-loop в my-workers.conf, похоже, был неправильный синтаксис. Я заменил

script
  for i in `seq 1 $NUM_WORKERS`
    do
      start worker N=$i
    done
  end
end script

на

script
  for i in `seq 1 $NUM_WORKERS`
  do
    start worker N=$i
  done
end script

и это сработало!

7
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
Goran Miskovic
Goran Miskovic
26-го декабря 2012 в 10:30
2012-12-26T22:30:30+00:00
Дополнительно
Источник
Редактировать
#17021933

Рассмотрите возможность добавления в файл worker.conf еще одного события:

stop on shutdown or workers-stop

Тогда вы сможете вызывать из командной строки

sudo initctl emit workers-stop

Вы можете добавить аналогичное событие для запуска рабочих. Чтобы добиться перезапуска всех рабочих, создайте задачу, которая будет испускать события workers-stop, а затем workers-start.

1
0
 giorgiosironi
giorgiosironi
9-го января 2017 в 9:14
2017-01-09T09:14:15+00:00
Дополнительно
Источник
Редактировать
#17021934

По сути, вы должны иметь процесс, который выполняет множество стоп и команды старт для всех П=1, комбинация N=2.

Простой способ сделать это-пара Баш для петли внутри себя старпома сценарийстрофы. Однако, если процессы, потребуется некоторое время, чтобы остановить (например, потому, что они работают над чем-то и они принимаютпрекращается после обработав их текущей работы) это неэффективно, так как приходится ждать один, чтобы остановить, прежде чем отправить сигнал к следующему.

Поэтому я создал скрипт выскочка, которая останавливает их параллельно https://github.com/elifesciences/builder-base-formula/blob/master/elife/config/etc-init-multiple-processes-parallel.conf

Сценарий составлен соли, используя в качестве входных карту названия процесса, сколько их там. Вот результат выборки:

description "(Re)starts all instances, in parallel"
# http://upstart.ubuntu.com/cookbook/#start-on
start on (local-filesystems and net-device-up IFACE!=lo)
task
script
    timeout=300
    echo "--------"

    echo "Current status of 5 elife-bot-worker processes"
    echo "Now is" $(date -Iseconds)
    for i in `seq 1 5`
    do
        status elife-bot-worker ID=$i || true
    done
    echo "Stopping asynchronously 5 elife-bot-worker processes"
    echo "Now is" $(date -Iseconds)
    for i in `seq 1 5`
    do
        (stop elife-bot-worker ID=$i &) || true
    done

    for i in `seq 1 5`
    do
        echo "Waiting for elife-bot-worker $i to stop"
        echo "Now is" $(date -Iseconds)
        counter=0
        while true
        do
            if [ "$counter" -gt "$timeout" ]
            then
                echo "It shouldn't take more than $timeout seconds to kill all the elife-bot-worker processes"
                exit 1
            fi
            status elife-bot-worker ID=$i 2>&1 | grep "Unknown instance" && break
            sleep 1
            counter=$((counter + 1))
        done
    done
    echo "Stopped all elife-bot-worker processes"

    echo "Starting 5 elife-bot-worker processes"
    for i in `seq 1 5`
    do
        start elife-bot-worker ID=$i
    done
    echo "Started 5 elife-bot-worker processes"

end script
0
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
Похожие сообщества 5
🐧 RU.UBUNTU — Официальное сообщество пользователей Ubuntu Linux
🐧 RU.UBUNTU — Официальное сообщество пользователей Ubuntu Linux
3 834 пользователей
Сообщество пользователей Ubuntu ⚠️ Правила: https://t.me/ru_ubuntu/575972 Список групп и каналов: https://github.com/goq/telegram-list
Открыть telegram
Системное администрирование
Системное администрирование
3 740 пользователей
Чат посвящён любым вопросам системного администрирования. Правила - https://t.me/srv_admins/1472142 Группа по Керио - https://t.me/Kerio_control Вопросы, обратная связь, реклама @SA_FRY_BOT
Открыть telegram
UbuntuLinux
UbuntuLinux
506 пользователей
Чат группы https://vk.com/ubuntulinux Соблюдаем правила группы ВК и внимательно читаем то, что по ссылке https://telegra.ph/ubuntu-group-Chat-Rules-03-30
Открыть telegram
Xubuntu-ru.net - Русскоязычное сообщество Xubuntu
Xubuntu-ru.net - Русскоязычное сообщество Xubuntu
141 пользователей
Открыть telegram
Lubuntu_Ru (Официальное Русскоязычное Сообщество Лубунту Линукс в Telegram)
Lubuntu_Ru (Официальное Русскоязычное Сообщество Лубунту Линукс в Telegram)
96 пользователей
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Александр Македонский
Зарегистрирован 6 дней назад
2
Andrei Kalinin
Зарегистрирован 3 недели назад
3
Koroleva Ego
Зарегистрирован 1 месяц назад
4
Star Lenon
Зарегистрирован 1 месяц назад
5
Данил Жевнеров
Зарегистрирован 2 месяца назад
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией