#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
. Оба позволяют перезапустить приложение без cron4. Я создал GIST с образцом, однако я не уверен, все ли в порядке или нет, потому что я не могу его протестировать сейчас: gist.github.com/fjtorres/de082ad90d0ff6bbb7db843a16ece7f1
5. Однако я не уверен, что env. переменные будут введены таким образом. Просто дважды проверьте это. Слава скорости обучения!
Ответ №1:
Вы должны использовать оболочку. YAJSW популярен, бесплатен и хорошо работает (по моему опыту) в производственных системах. Оболочка перезапустит ваш процесс в случае сбоя и может быть легко установлена как служба во многих разных операционных системах без особых усилий.
ПРИМЕЧАНИЕ: я никоим образом не связан или не связан с YAJSW.
Комментарии:
1. Я не использовал оболочку сервиса для своих проектов, однако я предполагаю, что в конце моя конфигурация должна быть на сервере, чтобы иметь возможность запускать службу с определенными переменными среды. Верно?