Использование systemd со Swift приложением

от автора

Эта статья для тех, кто пишет серверные Swift приложения

Все приложения на сервере необходимо запускать под управлением какого-либо демона. Возможно, вы уже используете supervisord или systemd.

Эта статья покажет, как упростить вашу жизнь при помощи systemd, интегрировав его напрямую в ваше приложение через SPM-плагин.

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


Чистый systemd

Настройка

Необходимо найти на просторах интернета примеры валидного конфига, поиграться с ним и сохранить в правильное место /etc/systemd/system.

Большинство разработчиков сдаются где-то здесь..

Управление состоянием

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

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

systemctl start   myapp.service           restart myapp.service           stop    myapp.service

Тут всё легко, но нужно помнить название конфигурационного файла

Удаление сервиса

systemctl stop myapp.service systemctl start clean --all

Не слишком сложно запомнить, но все же…

Просмотр логов

Здесь большинство разработчиков теряются потому что логи хранятся где-то в недрах /var/logs или где-либо ещё. Тут на помощь приходит journalctl.

Логи в реальном времени

journalctl -u myapp -f

Последние несколько строк

journalctl -u myapp -n 100 --no-pager

По-моему запомнить всё этого немного сложно, и я часто просто жму «вверх» по истории в консоли в поисках нужной команды

Плагин

Сильно упростить жизнь может плагин SwiftSystemd.

Он предоставляет простой способ управления всеми вышеупомянутыми процессами без головной боли.

Нужно сделать всего два действия: добавить в проект и запустить команду настройки.

Добавление в проект

Откройте файл Package.swift вашего приложения и добавьте всего одну строку:

.package(url: "https://github.com/MihaelIsaev/SwiftSystemd.git", from:"1.0.0")

Команда настройки

Перейдите в папку с вашим Swift приложением и выполните:

swift run systemd install

На этом конфигурационный файл будет создан и приложение будет запущено.

Есть возможность обойтись без диалогов в консоле заранее передав параметры:

swift run systemd install -c release -t App -u mike

-c,—config

конфигурация сборки: release или debug

-t,—target

имя исполняемого таргета из Package.swift

-u,—user

пользователь, под которым будет работать сервис

Листинг сгенерированного конфигурационного файла:

[Unit] Description="AppName" After=network.target  [Service] User={user} EnvironmentFile=/path/to/AppName/.env WorkingDirectory=/path/to/AppName TimeoutStopSec=2  Restart=always  ExecStart=/path/to/AppName/.build/{config}/{target}  [Install] WantedBy=multi-user.target

Вот и всё! Вы настроили своё приложение правильно, и не пришлось ничего гуглить и вспоминать. Всего два простых шага, и оно уже работает.

Логи

Одна из самых важных задач — просмотр логов.

swift run systemd logs

Так вы получите логи вашего приложения в реальном времени из journalctl.

swift run systemd logs --limit 100

Так можно вывести последние 100 строк из логов приложения.

Легко запомнить!

Управление состоянием

Проверить активность сервиса:

swift run systemd status

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

swift run systemd start    # запускает приложение                   stop     # останавливает приложение                   restart  # перезапускает приложение                   disable  # временно отключает приложение                   enable   # включает приложение

Так же можно отправить kill сигнал приложению:

swift run systemd kill

Удаление сервиса

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

swift run systemd uninstall

Заключение

Теперь можно выбросить все свои заметки по systemctl и journalctl .

Буду рад вашим коммитам в проект.


ссылка на оригинал статьи https://habr.com/ru/articles/850240/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *