Ubuntu запуск jar как сервиса

Обновлено: 05.07.2024

1. Introduction

2. Simple Service

We set the Type of service to simple because the system starts the JVM process directly, without spawning a child process.

ExecStop specifies the service termination command, and systemd is smart enough to figure out the PID of the started process. It automatically creates a MAINPID environment variable.

Then, we instruct systemd to send a 15 (SIGTERM) system signal to terminate the process gracefully.

The JVM designers made Java return a non-zero exit code in case it is terminated by a system signal. As a non-zero base, they took 128, and the resulting exit code is a sum of 128 and the signal numeric value.

By setting SuccessExitStatus to 143, we tell systemd to handle that value (128+15) as a normal exit.

3. Forking Service

The simple service unit file above might be quite sufficient for trivial applications. However, more practical cases will probably include additional settings.

These can be JVM parameters as well as any other application-specific parameters, for example, config or data file locations. That may result in writing a wrapper shell script where we can set up all the required parameters before starting the JVM.

4. Registering and Running the Service

No matter what service type we choose, to complete the mission, we must know how to set up and run the system service itself.

First, we need to name the unit file after the service name we want to have. In our examples, that could be javasimple.service or javaforking.service.

Then, we put the unit file under one of the locations where systemd can find it. For an arbitrary service, /etc/systemd/system is a good choice.

The full path to our system units, in that case, will be:

  • /etc/systemd/system/javasimple.service
  • /etc/systemd/system/javaforking.service

Another possible path to place system units is /usr/lib/systemd/system. This is typically the location used by the system installation packages.

However, we should consider it more appropriate when we develop our own .rpm or .deb installation packages containing system services.

Before that, however, we should notify systemd that it has to rebuild its internal service database. Doing this will make it aware of the new system unit we introduced. We can do this by passing the daemon-reload command to systemctl.

Next, we notice the system reports our service running but disabled. Disabled services will not start automatically when the system boots.

Of course, we can configure it to start up automatically along with the system. This is where we use another systemctl command — enable:

5. Conclusion

In this article, we looked at two possible ways of turning Java applications into system service by means of systemd.

Java is still one of the most popular programming languages. A lot of Java applications are designed to run non-interactively for a variety of tasks, such as processing data, providing an API, monitoring events, and so on. Thus, they all are good candidates to become system services.

Java - это кроссплатформенный язык программирования, благодаря которому программы, написанные один раз, можно запускать в большинстве операционных систем: в Windows, Linux и даже MacOS. И всё это без каких-либо изменений.

Но программы, написанные на Java, распространяются в собственном формате .jar, и для их запуска необходимо специальное ПО - Java-машина. В этой небольшой статье мы рассмотрим, как запустить jar-файл в Linux.

Как запустить jar Linux

Как я уже сказал, для запуска jar-файлов нам необходимо, чтобы на компьютере была установлена Java-машина. Если вы не собираетесь ничего разрабатывать, вам будет достаточно Java Runtime Environment или JRE. Что касается версии, то, обычно, большинство программ работают с 7 или 8 версией. Если нужна только восьмая, то разработчики прямо об этом сообщают. Посмотреть версию Java и заодно убедиться, что она установлена в вашей системе, можно с помощью команды:

У меня установлена восьмая версия, с пакетом обновлений 171. Если вы получаете ошибку, что команда не найдена, то это значит, что вам нужно установить java. В Ubuntu OpenJDK JRE можно установить командой:

Если вы хотите скомпилировать пример из этой статьи, то вам понадобиться не JRE, а JDK, её можно установить командой:

Чтобы узнать, как установить Java в других дистрибутивах, смотрите статью по ссылке выше. Когда Java будет установлена, вы можете очень просто запустить любой jar-файл в Linux, передав путь к нему в качестве параметра Java-машине. Давайте для примера создадим небольшое приложение:

public class Main public static void main(String[] args) System.out.println(" Losst test app! ");
>
>

Затем скомпилируем наше приложение в jar-файл:

javac -d . Main.java
jar cvmf MANIFEST.MF main.jar Main.class

Теперь можно запустить наш jar-файл командой java с параметром -jar:

java -jar main.jar

Таким образом вы можете запустить любой jar-файл, который собран для вашей версии Java. Но не очень удобно каждый раз открывать терминал и прописывать какую-либо команду. Хотелось бы запускать программу по щелчку мышки или как любую другую Linux-программу - по имени файла.

Если мы дадим программе право на выполнение:

chmod u+x ./main.jar

И попытаемся её запустить, то получим ошибку:

sudo apt install jarwrapper

Теперь можно запускать java в Linux по щелчку мыши или просто командой.

Выводы

В этой небольшой статье мы рассмотрели, как запустить jar Linux с помощью java-машины, а также как упростить команду запуска. Если у вас остались вопросы, спрашивайте в комментариях!

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

По сути операционная система состоит из ядра и огромного набора программ, которые предназначены для выполнения различных задач, обслуживания системы и удовлетворения потребностей пользователя. Почти все взаимодействие пользователя и операционной системы выполняется с помощью программ. Поэтому новичкам важно понять как запустить программу на Linux, что происходит во время запуска и какие есть способы запуска.

Дальше мы рассмотрим виды программ, их запуск программ на Linux различными способами и другие полезные для новичков вещи, опытным пользователям это все и так уже известно.

Виды программ в Linux

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

Все программы можно поделить на несколько типов:

  • Бинарные программы - содержат инструкции процессору уже готовые к выполнению, большинство программ находятся в таком формате, они быстрые и выполняются сразу же системой;
  • Программы на байт-коде - это уже не процессорные инструкции, а инструкции определенной виртуальной машины, которая может их выполнять, без виртуальной машины такие команды не могут быть выполнены. Такие программы потребляют больше ресурсов, но тоже достаточно быстрые, их преимущество в том, что они могут выполняться без изменения везде где может работать виртуальная машина. К таким программам можно отнести программы на Java.
  • Скриптовые программы - эти программы состоят из набора команд в виде обычного текста, которые выполняет специальный интерпретатор. Такие программы более медленные, но зато они проще в разработке и их код можно легко и быстро изменить.

А теперь перейдем к запуску программ.

Запуск программ в терминале

Изначально в операционных системах Unix и Linux не было графического интерфейса, поэтому программы запускались командами из терминала. Сейчас это тоже возможно и достаточно активно используется опытными пользователями. Синтаксис запуска программы выглядит таким образом:

/путь/к/файлу/программы параметры

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

Разработчики придумали обходной путь. Была создана переменная PATH, в которой хранятся все пути к папкам где обычно находятся программы - /bin, /sbin, /usr/bin, /usr/sbin и так далее. Вы можете посмотреть ее содержимое командой:

И можно передать параметры после пробела:

Когда программа находится не в этих каталогах, нужно указать к ней полный путь:

Если же вы хотите запустить программу через терминал ubuntu, которая находится в текущей папке, то ситуация будет немного другой. Система выполняет только поиск по папкам из переменной PATH, в текущей директории она не ищет. Поэтому, если вы наберете имя исполняемого файла, то получите ошибку. Нужно указывать полный путь, как вы помните путь к текущей папке будет ./:

Иногда возникает необходимость передать программе, какие-либо особые переменные окружения. Например, переменная EDITOR указывает какой текстовый редактор нужно использовать по умолчанию. Вы можете указать имя переменной и ее значение перед именем команды используя синтаксис:

имя_переменной = значение команда

По умолчанию эта команда открывает настройки утилиты sudo в редакторе Vim, но с этой переменной окружения настройки откроются в редакторе nano.

Запуск программ от имени другого пользователя

Вы уже знаете как запустить программу в терминале linux, а что насчет других пользователей? В Windows достаточно часто используется запуск программ от имени администратора чтобы программа могла получить больше прав доступа в системе. В Linux для этого используется утилита sudo. Ее имя можно расшифровать как switchuserdo - изменить пользователя и выполнить. По умолчанию утилита выполняет команду от имени суперпользователя root:

sudo команда
sudo whoami

sudo -u имя_пользователя команда
sudo -u postgres whoami

Команда whoami (кто я) выводит имя текущего пользователя.

Как запустить программу в фоне

Иногда возникает необходимость запустить долго выполняющуюся программу в терминале так, чтобы она не мешала дальше работать. Для этого можно использовать запуск программы в фоновом режиме linux:

dd if=/dev/zero of=

Система выведет PID, уникальный идентификатор программы, который вы потом можете использовать чтобы закрыть ее командой kill:

Как запустить скрипт в Linux

Мы уже говорили, что программы делятся на бинарные и интерпретируемые. Раньше мы говорили только про бинарные программы. Для запуска интерпретируемых нужен непосредственно интерпретатор, к таким программам относятся написанные на таких языках, как Java, Python, Perl, Ruby, PHP, NodeJS и многих других. Синтаксис запуска такой программы отличается:

интерпретатор /путь/к/файлу/программы параметры

Разные интерпретаторы ведут себя по разному, поэтому лучше сразу указывать полный путь к программе. Python обычно подхватывает скрипты из текущей папки без указания полного пути:

А Java программы нужно запускать так:

java -jar program.jar

Для файлов интерпретируемых программ флаг исполняемости необязательный, поскольку они передаются в виде параметра основной программе. Только Bash скрипты составляют исключение. Вы можете запустить скрипт интерпретатором:

Или же просто набрать путь к скрипту:

Оболочка сама определяет свои скрипты по флагу исполняемости и выполняет их. Если флаг исполняемости не установлен, то его стоит добавить:

sudo chmod u+x ./script.sh

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

Запуск программ Linux в графическом интерфейсе

Намного удобнее запускать программы через графический интерфейс. Если консольные программы так запускать невозможно, то для всех графических утилит существуют ярлыки, которые вы можете найти в главном меню системы:

Кроме того, вы можете запустить программу из файлового менеджера, двойным кликом мышью, но тогда для нее обязательно должен быть установлен флаг исполняемости.

Точно так же работает запуск скриптов в графическом интерфейсе. Вы можете найти все ярлыки из меню в каталоге /usr/share/applications/. Любую программу можно запустить двойным щелчком отсюда. Но давайте посмотрим что находится внутри ярлыка, для этого откройте его в текстовом редакторе:

Кроме всего прочего, в строке Exec указана команда, которая выполняет запуск программы linux, когда вы делаете двойной клик на ярлыке. Вы можете взять один из существующих ярлыков и сделать на его основе свой. Здесь указано просто имя программы. Но важно заметить, что лучше указывать полный путь в таких местах, как ярлыки, скрипты, cron и так далее это уменьшит количество ошибок, поскольку вы не можете знать проверяет ли система в этом случае PATH или ищет программу только в текущем каталоге. Теперь вы знаете все о том как запустить программу на linux.

Выводы

В этой статье мы рассмотрели как запустить программу через терминал ubuntu или в других дистрибутивах Linux. Несмотря на то, что это кажется очень простой темой, тут есть свои интересные моменты, которые могут быть полезны. Но вы о них уже знаете. Если у вас остались вопросы, спрашивайте в комментариях!

Java - популярный язык программирования, разработанный в компании Sun Microsystems, ныне принадлежащей корпорации Oracle. Java занимает лидирующие позиции в мире языков программирования. Многие программы, разработанные для Linux намного лучше выполняются с использованием проприетарной версии Java.

В данной статье будет рассмотрена установка JRE (Java Runtime Environment) и JDK (Java Development Kit) 8 версии on Oracle на дистрибутивы Ubuntu 20.04, CentOS 8 и Arch Linux. Также будет рассмотрен выбор необходимой среды по умолчанию.

Чем отличается JDK от JRE

  • JRE - Java Runtime Environment - это среда выполнения Java. Предназначена для обычного использования. Позволяет запускать приложения, написанные на языке Java.
  • JDK- Java Development Kit - стандартная версия платформы Java, предназначенная для разработки. Это специальный пакет разработчика, в который входят документация, различные утилиты, компилятор, библиотеки классов, а также сама JRE.

Установка Java в Ubuntu

Для начала необходимо скачать архив с официального сайта Oracle выбрав пакет с именем Linux x64 если используется 64 битная система или выбрать пакет с именем Linux если используется 32 битная система:

TJLJfuz9wzEAAAAASUVORK5CYII=

Далее скачанный архив необходимо переместить в любую директорию и распаковать. В качестве примера будет выбрана директория /usr/java/ Предварительно данную директорию необходимо создать при помощи команды:

sudo mkdir /usr/java/

Awf5x9h1Cge7AAAAAElFTkSuQmCC

Для перемещения архива необходимо выполнить следующую команду:

(тильда) означает домашнюю директорию пользователя. Далее перейдите в директорию /usr/java и распакуйте архив при помощи команды:

sudo tar -xzvf jre-8u311-linux-x64.tar.gz

9QaKxvEOkKaSS1b8j0Tvp08v+IQ4MvfmSH2Qqe3o8f8HXC8y7UlKfEYAAAAASUVORK5CYII=

Далее системе необходимо указать, где находятся установочные файлы Java. Для этого необходимо создать символическую ссылку в каталоге /usr/bin/ которая будет ссылаться на установочную директорию /usr/java/jre1.8.0_311 Для этого необходимо выполнить команду:

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/java/jre1.8.0_311/bin/java" 1

O0NJDAcmttmhKcZqLneq2gS45i58z5EjnbzyNQsTqQwN570QUdN8VTOfFRdgx7b8fwE9JnEhhFHl4wAAAABJRU5ErkJggg==

После этого можно проверить версию Java выполнив команду:

uAJAAAAAElFTkSuQmCC

Загрузите архив со средствами разработки с официального сайта компании Oracle. Необходимо выбрать раздел Linux и найти пакет с именем jdk-8u311-linux-aarch64.tar.gz:

D7GgZhvZ1heuAAAAAElFTkSuQmCC

Далее необходимо поставить галочку напротив пункта I reviewed and accept the Oracle Technology Network License Agreement for Oracle Java SE тем самым подтверждая принятия условия лицензионного соглашения.

Fese28Keg6QAAAAASUVORK5CYII=

Для скачивания файла необходимо войти в свою учетную запись Oracle или создать новую, только после этого начнется загрузка архива.

В качестве примера также будет выбрана директория /usr/java. Предварительно данная директория должна быть создана. Перенесите архив в директорию /usr/java:

wJKHqzr2cjQAAAABJRU5ErkJggg==

Далее перейдите в директорию /usr/java и распакуйте архив:

sudo tar -xzvf jdk-8u311-linux-x64.tar.gz

9wbymZsLeWgAAAABJRU5ErkJggg==

Так же, как и при настройке JRE необходимо указать, где находятся установочные файлы Java. Для этого необходимо создать символическую ссылку в каталоге /usr/bin/ которая будет ссылаться на установочную директорию /usr/java/jdk1.8.0_311. Для этого необходимо выполнить команду:

sudo update-alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_311/bin/java 1

5jDAyOEAAAAASUVORK5CYII=

Переменные окружения

Многие программы используют переменную среды JAVA_HOME для того, чтобы определить расположение установки Java. Чтобы установить эту переменную для всех пользователей, сначала необходимо узнать, где именно хранится установка Java. Для этого необходимо выполнить команду:

sudo update-alternatives --config java

8H8IVE+xECxXAAAAAASUVORK5CYII=

В данном случае в системе установлены JRE и JDK одновременно. Поэтому присутствует 2 пути:

  • /usr/java/jdk1.8.0_311/bin/java
  • /usr/java/jre1.8.0_311/bin/java

Выберите нужный тип Java и скопируйте путь необходимой версии и откройте файл /etc/environment в любом текстовом редакторе (например nano):

sudo nano /etc/environment

8fEmBMz97bRJ4AAAAASUVORK5CYII=

Необходимо добавьте строку с путём установки JRE или JDK в конец этого файла:

tncR3QyKUguHjDl3x6QyHOwug1d1y9PWnDqM3f8HPohND64QrPAAAAAASUVORK5CYII=

Сохраните и закройте файл. Чтобы применить настройки, необходимо перейти в учётную запись root далее перечитать файл выполнив в терминале команду:

Установка Java в Arch Linux

В официальных репозиториях Arch Linux присутствует только OpenJDK, в то время как проприетарная JRE присутствует только в пользовательских репозиториях aur. Для установки JRE необходимо перейти по ссылке официальной страницы JRE в репозитории aur и найти ссылку на GIT репозиторий программы в поле Git Clone URL:

wFJfNkAb+2MPAAAAABJRU5ErkJggg==

Далее необходимо склонировать данный репозиторий при помощи команды:

8LFy8UuipbQI8AAAAASUVORK5CYII=

Перейдите в скачанный репозиторий:

Для установки JRE необходимо выполнить команду:

xIu97DQV6wIrZMrmU7d56hh09asrkWpC2oL+fwBz9HzHPEFHUwAAAABJRU5ErkJggg==

При появлении фразы Proceed with installation? [Y/n] введите y и нажмите на клавишу Enter:

BafxjWnn8Uf+AAAAAElFTkSuQmCC

Установка JRE завершена.

Как и JRE JDK так же присутствует только в пользовательском репозитории aur. Несмотря на то, что установочный процесс совпадает с установкой JRE, у установки JDK есть одна особенность - с тех пор как пакеты JDK расположенные на сайте Oracle требует авторизации на сайте необходимо заранее скачать пакет JDK иначе установщик выдаст ошибку.

Перейдите на официальный сайт Oracle найдите и скачайте архив с именем jdk-8u301-linux-x64.tar.gz:

AVgXc9sCLpQnAAAAAElFTkSuQmCC

Далее склонируйте репозиторий с JDK выполнив команду:

MTmUtSCv1rHCsRSubkkQQUQL7B3Igmi107P8CD57nqEX0RocAAAAASUVORK5CYII=

Переместите ранее скачанный архив в только что склонированный репозиторий при помощи команды:

mv Downloads/jdk-8u301-linux-x64.tar.gz jdk8/

Где Downloads - директория куда был скачен архив, а jdk8/- директория с самим JDK. Перейдите в директорию с JDK и запустите команду для установки:

JgDZUkKIykfwpmoisG+XQhL5QaUIfycN6fvnvpkwHmJse2QYAAAAASUVORK5CYII=

При появлении фразы Proceed with installation? [Y/n] введите y и нажмите на клавишу Enter:

Je8cAAAAASUVORK5CYII=

После этого установка JDK будет завершена.

Установка Java в CentOS 8

Для RHEL дистрибутивов, таких как, CentOS, Fedora, RedHat и OpenSUSE есть официальный RPM-пакет. Для начала необходимо скачать пакет с официального сайта Oracle выбрав пакет с именем Linux RPM если используется 64 битная система или выбрать пакет с именем Linux x64 RPM если используется 32 битная система:

Чтобы установить пакет необходимо выполнить команду в терминале:

sudo rpm -i jre-8u311-linux-x64.rpm

H+e6jWWzjgjhW9CU5Noa6zBfkfRAcluHMeCd68WTb44GVEbKWIA6rBntL8iQpbmYScmZDbVnSOVoZen8ASURNvrAw+nQxpS+25IMY9r7bBqmGwIPk8sFFwYnWqMBnsuMWp9P8PnZk0VMIhYZ0AAAAASUVORK5CYII=

После установки можно проверить версию JRE при помощи команды:

B8sb3pmw0Z8ZAAAAAElFTkSuQmCC

Средства для разработчиков также можно скачать с официального сайта Oracle выбрав пакет с именем jdk-8u311-linux-x64.rpm для 64 битной системы и выбрав пакет с именем jdk-8u311-linux-i586.rpm для 32 битной системы:

38PGAnobR9D9gAAAABJRU5ErkJggg==

Для установки из терминала, необходимо выполнить команду:

sudo rpm -i jdk-8u311-linux-x64.rpm

iT0cBhpPLkAAAAAASUVORK5CYII=

Для просмотра версии JDKнеобходимо выполнить команду:

5O1QVyR45yMAAAAAElFTkSuQmCC

Выбор версии Java по умолчанию

Ubuntu 20.04

Для начала необходимо вывести список всех установленных версий Java в системе. Для этого необходимо выполнить команду:

sudo update-alternatives --config java

8H8IVE+xECxXAAAAAASUVORK5CYII=

Если у в вас системе установлено несколько версий Java можно выбрать ту, которая будет использоваться по умолчанию. Так как на данный момент в системе присутствует только 8 версия Java то выбирать версию нет необходимости. Если в системе одновременно присутствуют 2 и более версии, то для выбора версии по умолчанию необходимо ввести цифру, которая будет располагаться напротив нужной версии.

ArchLinux

Для начала просмотрите список установленных сред при помощи команды:

archlinux -java status

Далее установите необходимую версию:

sudo archlinux -java set имя_среды

C6N0VessAcfuAAAAAElFTkSuQmCC

Для проверки версии JDK необходимо выполнить команду:

Mp6cb2kd+iLZdR57qb1k04q8eINBi+pgj0z40V9iVf9pniT8lUIMCm0DUuNE+KUro2JRrM6VGvHmkJU5mIYoDGLXCbjyJ5X4yN+X4vCng4lzn2HJMUsnesxtM0sEJWw0EWBeNcl2U1pFCw9yCVv8LO2o3urIvSXcAAAAASUVORK5CYII=

Для проверки версии JRE необходимо выполнить команду:

ALZLJr9WQoB6AAAAAElFTkSuQmCC

CentOS 8.2

Выбрать необходимую версию Java можно с помощью команды ниже (так же, как и в Ubuntu). Необходимо выбрать цифру, соответствующую номеру версии:

sudo update-alternatives --config java

wKc8JSLwIIgyQAAAABJRU5ErkJggg==

Выводы

В данной статье показан процесс установки и настройки Java в различных дистрибутивах Linux. Если остались вопросы, спрашивайте в комментариях!

Читайте также: