В этой статье я покажу вам, как можно легко управлять приложениями Java jar с помощью службы Systemd. Systemd — это менеджер систем и служб для Linux. Теперь это система инициализации по умолчанию для ряда дистрибутивов, включая Ubuntu, Debian, CentOS, Arch Linux и т. д. В этом развертывании у меня есть Jar-файл, расположенный в папке /opt/prod/ каталог. Как правило, нам нужно добавить системного пользователя, который будет запускать приложение с помощью systemd.
Создать пользователя и группу приложения
Начните с создания системной группы для пользователя.
sudo groupadd -r appmgr
Далее создаем системного пользователя jvmapps с группой по умолчанию:
sudo useradd -r -s /bin/false -g appmgr jvmapps
Подтвердите создание пользователя и его принадлежность к правильной группе:
$ id jvmapps uid=992(jvmapps) gid=986(appmgr) groups=986(appmgr)
Создать системную службу
Теперь мы можем создать файл службы systemd для управления нашим приложением. Вам нужно создать этот файл как пользователь root.
sudo vim /etc/systemd/system/myapp.service
Он будет иметь следующее содержание:
[Unit] Description=Manage Java service [Service] WorkingDirectory=/opt/prod ExecStart=/bin/java -Xms128m -Xmx256m -jar myapp.jar User=jvmapps Type=simple Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target
Набор User к созданному ранее, и WorkingDirectory в каталог с jar-файлом.
-Xms128m и -Xmx256m используются для установки минимального и максимального объема памяти, который может использовать приложение.
После внесения изменений предоставьте пользователю и группе права владения каталогом проекта:
sudo chown -R jvmapps:appmgr /opt/prod
Запустите службу приложений Java с помощью systemd
Следующее, что нужно сделать, это запустить службу приложений, но сначала перезагрузите systemd, чтобы он узнал о новом добавленном приложении.
sudo systemctl daemon-reload
После перезагрузки запустите службу:
sudo systemctl start myapp.service
Для проверки статуса используйте:
systemctl status myapp
Пример вывода:
$ systemctl status myapp ● myapp.service - Manage Java service Loaded: loaded (/etc/systemd/system/myapp.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2023-11-24 11:12:23 EAT; 23h ago Main PID: 23220 (java) CGroup: /system.slice/myapp.service └─23220 /bin/java -Xms128m -Xmx256m -jar myapp.jar Aug 25 10:50:00 server1 java[23220]: # Duration: 1000 µs Aug 25 10:50:00 server1 java[23220]: # Total number of fields classified 0, 0 failed Aug 25 10:50:00 server1 java[23220]: # --------------------------------------------------------------- Aug 25 10:50:00 server1 java[23220]: # Completed step 'classify-tables' Aug 25 10:50:00 server1 java[23220]: # Start: 2018-08-25T07:50:00.258Z Aug 25 10:50:00 server1 java[23220]: # End: 2018-08-25T07:50:00.259Z Aug 25 10:50:00 server1 java[23220]: # Duration: 1000 µs Aug 25 10:50:00 server1 java[23220]: # Total number of tables classified 3, 0 updated Aug 25 10:50:00 server1 java[23220]: ################################################################# Aug 25 10:50:00 server1 java[23220]: 08-25 10:50:00 INFO sync.util :: FINISHED: Analyze data for mysql Database 2 'Ch... (8 ms) Hint: Some lines were ellipsized, use -l to show in full.
Вы также можете включить запуск службы при загрузке сервера:
$ sudo systemctl enable myapp Created symlink from /etc/systemd/system/multi-user.target.wants/myapp.service to /etc/systemd/system/myapp.service.
Для перезапуска приложения используйте:
sudo systemctl restart myapp
Теперь у вас есть Java-приложение, управляемое Systemd. Повторите ту же процедуру для всех других служб, которыми вам нужно управлять с помощью Systemd init. Надеюсь, это было полезно, если у вас возникнут какие-либо проблемы, дайте мне знать в разделе комментариев.