2013-05-29 1 views
3

Я использую Ubuntu VPS для размещения нескольких веб-приложений Ring. У меня есть отдельное окно экрана GNU для каждого из них, и я запускаю и останавливаю их, используя lein run и ^C, соответственно. Это работает, но он чувствует себя дилетантским, и если что-то пойдет не так, эти службы не будут перезагружаться автоматически.Как я могу использовать служебную команду Ubuntu для управления Ring-приложениями?

Я хотел бы установить что-то, чтобы начать и остановить свои приложения, используя команду Ubuntu service (которую я уже использую для запуска и остановки nginx). Есть ли какой-то ярлык, который я могу использовать, чтобы заставить эти приложения работать с командой service? Например, есть ли какой-то шаблон Leiningen- или Ring-friendly, в который я могу просто вставить путь моего приложения? В противном случае, каковы были бы лучшие методы написания моего собственного скрипта service для интеграции с Jetty?

ответ

5

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

Конечно, во время разработки более удобно использовать lein run из вашего каталога проектов. Ради повторяемости я бы рекомендовал использовать второй подход для производственных систем.

Общий подход заключается в использовании задачи lein uberjar для создания автономного JAR-файла. Оттуда довольно просто (хотя и немного утомительно) создать скрипт, который вы можете вставить в /etc/init.d, чтобы запустить файл JAR, либо напрямую через java, либо используя jsvc.

Похоже, есть плагин Leiningen (lein-init-script), чтобы автоматизировать процесс генерации сценария службы, хотя у меня нет опыта с ним. Вероятно, вы захотите это проверить.