Как стать автором
Обновить

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

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.3K

Эта статья для тех, кто пишет серверные 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 .

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

Теги:
Хабы:
Всего голосов 4: ↑3 и ↓1+4
Комментарии1

Публикации

Работа

Ближайшие события