← Все записи

Erlang. Фиксы запуска нескольких копий epmd

Read in English

Столкнулся с проблемой, когда не пингуется erlang-нода на сервере, где запущено два epmd. А запущено их два, потому что один запускается проектом (при старте erl), а второй запускает ejabberd.

Симптомы напоминают проблему с firewall:

(test2@127.0.0.1)1> net_adm:ping('test1@127.0.0.1').
pang

Смотрим ps ax:

ps ax | grep epmd
root     1212   ... /usr/local/lib/erlang/erts-5.9.3.1/bin/epmd -daemon
root     1515   ... /usr/local/bin/epmd -daemon

Если выполнить kill 1212 1515 и запустить еще раз erl, то станет пинговаться:

(test2@127.0.0.1)1> net_adm:ping('test1@127.0.0.1').
pong

Дополнительные симптомы я описывал на Stack Overflow.

Решение

Открываем на редактирование /etc/rc.conf:

ejabberd_enable="YES"
epmd_enable="YES"

А в /usr/local/etc/rc.d/epmd добавляем:

start_precmd=epmd_prestart
epmd_prestart() {
    `ps ax | grep epmd | awk '{ print $1}' | xargs kill`
    return 0
}

Приходится использовать такой костыль, так как я не смог найти как заставить ejabberd не поднимать epmd.

Комментарии 8

Архив обсуждения. Новые комментарии закрыты.

Хороший человек

Стоит ли переходить на эрланг (или, хотя бы, начать использовать), если всё устраивает в питоне?

adw0rd

Ну они разные и для разного, просто питон многофункциональный, а erlang более узконаправленный. Надо выбирать под проект технологии.

Если надо разбирать много данных (роутинг, краулинг), то erlang самое то. Но если при этом есть еще куча бизнес логики, то стоит использовать erlang-порты и писать бизнес-логику на python/ruby и т.п.

Али

Михаил, здравствуйте. Скажите пожалуйста какие базовые знания необходимы что бы начать изучать эрланг? Нужен ли опыт работы с функциональными языками программирования? И еще подскажите пожалуйста литературу по изучению сабжа, и по каким учебникам вы изучали эрланг.
Спасибо.

adw0rd

Сложно сказать про базовые знания, у меня по сути был опыт только с императивными языками, Erlang сильно отличается по парадигме. Но я бы не сказал что он труден, по началу кажется совсем сложным, а потом как-то переключаешься/вникаешь и все стает просто и легко.

Опыт с функциональными языками был бы полезен, но не так сильно как может показаться.

По поводу литературы, я тут привел ссылочки http://adw0rd.com/bookmarks/ , по ним и изучал

Али

Спасибо большое! Слышал, многие говорят что он учится за неделю, но мне кажется что за неделю его освоить могут те, кто знаком с функциональным программированием.

adw0rd

Чаще говорят о “двух неделях”, но я изучал медленно, по 2 часа в неделю, так что проверить не смог это… Хочу в течении двух недель оформить статью о “вступлении в Erlang”, но думаю вы выучите раньше, чем я закончу :-)

mathete

О! Я дождался этой статьи! Поворачиваем блог в правильном направлении :)

Язык простой. Главное понимать, что это не язык в привычном понимании, а платформа. И сложность в нем не в постижении функционально-ориентированного стиля, а в постижении процессно-ориентированного стиля. Вся его ценность не в том, что там иммутабельность, паттерн-матчинг и списковые выражения, а в том, что процессы, ноды, подключаемая внешняя логика и всё это с роскошной инфраструктурой.

К эрлангу приходят не потому, что питон не справляется с описанием бизнес-логики, или хочется статической уверенности. А потому что на питоне поддерживать кластер из множества процессов с обменами, репликацией и фаиловером очень муторно.

Если ваши задачи укладываются в процесс на одной машине - эрланг вам не нужен. Совершенно.
Если у вас кластер на питоне, с каким-нибудь rabbitMQ, базами данных, редисом, мемкешем, с кучей сервисов, всё это местами работает, местами нет и каждый шаг масштабирования это боль - остановитесь. Потратьте две недели, месяц на изучение эрланга. Это с лихвой окупится

adw0rd

Да, Боря всё верно говорит! Erlang - это офигенная платформа для распределенной работы