Как запустить .jar приложение как сервис (Запуск при загрузке системы)

Вопрос или проблема

Хорошо, я постараюсь быть кратким. Я разрабатываю клиент-серверное приложение с сервером на Ubuntu 17.04. На этом сервере находится .jar файл, содержащий весь серверный код.

Код просто привязывает сокеты и постоянно слушает запросы клиентов, создавая потоки для каждого запроса.

Проблема в том, что я не могу запустить .jar при загрузке системы. Я проверяю это, смотря на открытые порты, и ни один из портов, который я закодировал, не прослушивается при загрузке.

Я пробовал следующее:

Программы при загрузке – не сработало.

Systemd – .sh скрипт работает идеально, когда я запускаю его обычно, .jar запускается, и порты открываются, но при загрузке ничего не происходит. Использование sudo service bla bla bla start также запускает приложение идеально. Оно просто не работает при загрузке.

Указанная цель – graphical.target, и юнит запускается ПОСЛЕ mysql.service.

Использование init.d – ничего не происходит.

Я не знаю, что мне делать. Пожалуйста, помогите, спасибо.

i) Создайте свой bash скрипт под названием mystartup.sh для запуска .jar файла в директории /etc/init.d/ (войдите как root)

# vi /etc/init.d/mystartup.sh

ii) Добавляйте команды в этот скрипт одну за другой:

#!/bin/bash

echo “Настраиваем пользовательскую среду…”
fortune

iii) Установите права на выполнение для скрипта:

# chmod +x /etc/init.d/mystartup.sh

iv) Убедитесь, что этот скрипт выполняется каждый раз, когда система Debian Linux загружается:

# update-rc.d mystartup.sh defaults 100

Чтобы узнать больше, следуйте по этой ссылке.

Простой способ предоставлен пакетом upstart, после его установки просто сохраните следующий скрипт в etc/init/onshutdown.conf:

# /etc/init/onshutdown.conf
start on starting rc RUNLEVEL=2
# выполнить одну команду
exec /bin/sh /path/to/mystartup.sh
# или без дополнительного скрипта
script
  java -jar /path/to/jarfile.jar
  # ваши команды здесь
end script

Замените 2 на ваш предпочтительный уровень выполнения (например, [2345]). Для получения дополнительной информации о upstart смотрите man 5 init и кулинарную книгу upstart.

Ответ или решение

Для того чтобы запустить .jar-приложение как службу при загрузке системы в Ubuntu 17.04, вам потребуется использовать Systemd, так как это стандартная система инициализации для современных дистрибутивов Linux. Давайте рассмотрим пошаговую инструкцию, чтобы убедиться, что ваше приложение успешно запускается при загрузке.

Шаг 1: Создайте Systemd-сервисный файл

  1. Создайте файл службы в каталоге /etc/systemd/system/. Назовите его, например, myapp.service.

    sudo nano /etc/systemd/system/myapp.service
  2. Добавьте следующий шаблон в файл:

    [Unit]
    Description=My Java Application
    After=network.target mysql.service
    
    [Service]
    Type=simple
    User=your_username  # Замените на имя пользователя, под которым будет запускаться приложение
    ExecStart=/usr/bin/java -jar /path/to/your/application.jar
    Restart=on-failure
    Environment=JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64  # Замените на ваш JAVA_HOME
    
    [Install]
    WantedBy=multi-user.target

    В этом шаблоне:

    • Description — краткое описание сервиса.
    • After — указывает, что служба должна запускаться после указанных служб.
    • ExecStart — команда для запуска вашего .jar файла, замените путь на фактический путь к вашему .jar файлу.
    • Restart — указывает, что служба будет перезапущена в случае сбоя.
    • Environment — указывает переменные окружения, в данном случае — путь к Java.

Шаг 2: Перезагрузите демон Systemd

После создания файла услуги нужно перезагрузить демона Systemd, чтобы он распознал новый сервис.

sudo systemctl daemon-reload

Шаг 3: Настройте автоматический запуск при загрузке

Чтобы вставить ваш сервис в группу автозагрузки, выполните следующую команду:

sudo systemctl enable myapp.service

Шаг 4: Запустите службу

Теперь вы можете запустить службу вручную, чтобы проверить, работает ли она корректно:

sudo systemctl start myapp.service

Шаг 5: Проверьте статус службы

После запуска проверьте статус службы, чтобы убедиться, что она работает корректно:

sudo systemctl status myapp.service

Если служба не работает, проверьте логи на наличие ошибок:

journalctl -u myapp.service

Шаг 6: Перезагрузка системы

Теперь, когда служба настроена, перезагрузите систему, чтобы убедиться, что ваше .jar-приложение запускается автоматически:

sudo reboot

После перезагрузки проверьте статус службы, как описано выше, и убедитесь, что ваше приложение начинает работать автоматически.

Заключение

Использование Systemd для управления вашей Java-программой гарантирует, что она будет автоматически запускаться при каждом перезапуске системы. Убедитесь, что все пути указаны верно, и что у вашего приложения есть необходимые права на выполнение. Если у вас возникнут какие-либо проблемы, обратитесь к логам для диагностики.

Следуя этим шагам, вы сможете успешно запустить свое Java-приложение как службу в Ubuntu 17.04.

Оцените материал
Добавить комментарий

Капча загружается...