У меня есть приложение Начальной загрузки Spring, которое я хочу начать использовать System V Init
. Мой файл банки находится в /var/my-app/my-app-0.0.1-SNAPSHOT.jar
. Так, я создал символьную ссылку с помощью команды ниже
sudo ln -s /var/my-app/my-app-0.0.1-SNAPSHOT.jar /etc/init.d/my-app-0.0.1-SNAPSHOT
без любой проблемы. Однако, когда я пробую
sudo service my-app-0.0.1-SNAPSHOT start
Я получаю ошибку:
/etc/init.d/my-app-0.0.1-SNAPSHOT: 1: /etc/init.d/myapp-0.0.1-SNAPSHOT: Syntax error: Unterminated quoted string
У кого-либо есть идея, что я делаю неправильно?Спасибо.
В случае, если это могло бы помочь кому-то еще в будущем, мне удалось заставить это работать с помощью upstart
. Исходный ответ может быть найден здесь.
Я собираюсь скопировать и вставить ответ Patrk Bego здесь для удобства:
Необходимо будет сначала определить Новомодный сценарий (в случае Ubuntu 14.04), это находится в/etc/init/и заканчивающийся в .conf. (http://upstart.ubuntu.com/cookbook/)
# <service name>.conf
start on filesystem
exec /usr/bin/java -jar /path_to/program
в случае Ubuntu 16.06 + (можно найти хорошую статью здесь),
sudo vim /etc/systemd/system/my-webapp.service
Затем можно выполнить его как:
sudo service <your service name> start
Надежда, которая помогает.
Ubuntu использует systemd. Можно найти сообщение кого-то задающего подобный вопрос в этом сообщении
Другой подход должен был бы использовать некоторый инструмент оркестровки как kubernetes или рой докера для создания сервисов, которые могут повторно выполнить сервис, даже если он перестал работать в какой-то момент времени.
Пример с докером:
В Вашем Dockerfile
FROM java:8-jre-alpine
COPY /location/of/your/jar/xyz.jar /where/you/want/it/stored/xyz.jar
CMD ["/bin/sh", "-c", "java -jar /where/you/want/it/stored/xyz.jar"]
Создайте свое изображение докера
docker build \
-t my-app:0.0.1-snapshot \ #specify a name for your image
/dockerfile/location/ # the location of your dockerfile
Протестировать
docker run -it \ # -it represents interactive tty
-p 80:8080 \ # -p binds 8080 (the container port) to 80 (host port)
--restart=always \ # --restart=always run the service unless stopped by user
--name my-app \ # --name the name of your container
my-app:0.0.1-snapshot # the image you built with the build command
Тест с почтальоном или браузером к Вашему localhost. Можно попытаться перезапустить компьютер, и приложение должно все еще работать. В производстве Вы использовали бы рой или kubernetes.
Для использования роя Вы создаете a docker-compose.yml
файл и Вы должны сохранить Ваши изображения на реестре - созданное изображение должно существовать на руководящем узле, если это не продвинуто к реестру.
В Вашем docker-compose.yml
version: '3.5'
services:
my-app:
image: my-app:0.0.1-snapshot
ports:
- "80:8080"
restart: always
В терминале:
docker swarm init
docker stack deploy my-app --compose-file ./docker-compose.yml
Необходимо проверить их документацию для других вопросов как персистентность и безопасность.