Erlang, rebar3 и установка сервиса под Windows
Как заставить Erlang релиз работать как сервис под Windows. Оставим за кадром вопрос зачем это делать. Просто иногда это нужно. Так что сосредоточимся на КАК. Что-бы было еще сложнее поставим себе задачу делать это с помощью wixtoolset.
Эта заметка некая шпаргалка самому себе. Хотя я очень надеюсь что никогда не пригодится. Поехали.
Представим себе что файлы мы как-то поставили и ран-тайм с собой принесли. Запуск апликации в виде консоли срабатывает и теперь надо оформить запуск приложения в виде сервиса. Если есть проблемы уже на этом этапе — пишите мне, я там как-раз топтался.
Итак, Тут нас ждут несколько веселых подводных камней. Мы как-бы можем запустить скрипт ИМЯ-АПЛИКАЦИИ.cmd install. И это даже сработает. Но есть 2 недостатка — вскакивает черный экран и сервис не удаляется при удалении апликации.
Так что перейдем к тому чего будет нехватать:
1) Файл erl.ini в директории erts-НОМЕР\bin. Его содержимое после установки содержит пути машины где релиз собирали. Его содержимое надо менять. И в путях надо ставить двойные слеши.
2) Запускается сервис с помощью файла erlsrv.exe. Это часть рантайма, тут все хорошо. Надо не забыть взять его с собой.
3) erlsrv.exe расчитывает найти файл start.boot по адресу releases\VERSION. А его там нет. И надо скопировать его
4) erlsrv.exe хранит параметры сервиса в регистре. И их надо дописать самим.
Теперь примеры
Например нашу чудо апликацию зовут erlang_service. Пишем в регистр:
Тут у нас так:
--rootdir — место где установлена апликация. Именно так. Если взять например [ROOT] — id самой директории, то ничего не будет работать, так как в конце будет слеш. А оно его сбивает с толку.
InternalServiceName Value=«erlang_service» — под таким именем будем ставить сервис.
SName — это erlang short name
[ROOT] — ID директории в которой лежат наши файлы.
ну и сам сервис:
В результате имеем сервис который автоматически ставится, останавливается и корректно удаляется.
Все.