Запуск java-приложения после сбоя или перезапуска сервера

#java #shell #ssh #bitbucket-pipelines

#java #оболочка #ssh #bitbucket-конвейеры

Вопрос:

У меня есть несколько Java-приложений, в основном с Spring Boot, на разных серверах (Droplets) от Digital Ocean. Ранее я загружал каждую новую версию вручную, и с помощью некоторых созданных сценариев оболочки я могу запускать / останавливать приложения. Эти сценарии содержат переменные среды, когда это необходимо для тестовых или производственных сред. Чтобы проверить, запущено ли приложение, у меня каждые 5 минут запускается cronjob, этот cronjob запускает сценарий оболочки для запуска приложения, если оно не запущено.

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

Например cat environment.sh start.sh | ssh xxx@yyy , where environment.sh создается на лету конвейером с правильной конфигурацией в этот момент для каждой среды.

Как я могу что-то сделать для автоматического запуска приложения, если оно не запущено? Должен ли я загружать файлы сценариев при каждом автоматическом развертывании и использовать cronjob?

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

1. Я думаю, что разумно использовать скрипты. Однако, если ваша среда Linux поддерживает systemd , было бы лучше использовать ее возможности, в частности targets , которые автоматически перезапускаются. Я делал это в своей предыдущей работе

2. Все переменные среды будут управляться через настройки конвейера Bitbucket, чтобы централизовать его и избежать ручного обновления файлов на сервере. Итак, ваше предложение — загрузить его на сервер, чтобы иметь возможность создавать новые cronjob, как у меня было раньше. Верно? У меня нет знаний о systemd, но я постараюсь проверить.

3. Да, но без cron. В Linux в основном две системы инициализации: initd (более старая) и более новая systemd . Оба позволяют перезапустить приложение без cron

4. Я создал GIST с образцом, однако я не уверен, все ли в порядке или нет, потому что я не могу его протестировать сейчас: gist.github.com/fjtorres/de082ad90d0ff6bbb7db843a16ece7f1

5. Однако я не уверен, что env. переменные будут введены таким образом. Просто дважды проверьте это. Слава скорости обучения!

Ответ №1:

Вы должны использовать оболочку. YAJSW популярен, бесплатен и хорошо работает (по моему опыту) в производственных системах. Оболочка перезапустит ваш процесс в случае сбоя и может быть легко установлена как служба во многих разных операционных системах без особых усилий.

ПРИМЕЧАНИЕ: я никоим образом не связан или не связан с YAJSW.

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

1. Я не использовал оболочку сервиса для своих проектов, однако я предполагаю, что в конце моя конфигурация должна быть на сервере, чтобы иметь возможность запускать службу с определенными переменными среды. Верно?