Вопрос или проблема
Хорошо, я постараюсь быть кратким. Я разрабатываю клиент-серверное приложение с сервером на 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-сервисный файл
-
Создайте файл службы в каталоге
/etc/systemd/system/
. Назовите его, например,myapp.service
.sudo nano /etc/systemd/system/myapp.service
-
Добавьте следующий шаблон в файл:
[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.