Может ли служба systemd обновляться сама?

Может ли служба systemd обновляться сама?

Привет, ребята из безупречного сервера!

Я хотел бы написать службу systemd, которая может обновляться сама.

В частности, каждые 5 минут он должен проверять Amazon S3 на наличие новых версий своих двоичных файлов и .serviceфайлов. Если они были обновлены, он должен загрузить и заменить их, а затем перезапустить себя.

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

Есть ли какой-то стандартный способ добиться этого?

Спасибо!

EDIT: Чтобы прояснить, я спрашиваю, возможно ли сделать это с помощью одной службы. Я понимаю, что могу иметь пару служб, которые обновляют друг друга, но это кажется неэлегантным.

решение1

Обновление файлов, связанных с файлами systemd .service или исполняемыми файлами программ, аналогично обновлению любого другого файла.

На самом деле вам следует сделать это с помощью средства управления конфигурацией, например Ansible, но чтобы сделать это как есть, ваш общий рабочий процесс может включать использование скрипта bash/python, который выполняет следующие действия:

  1. Получает файл(ы) с веб-сервера/s3/etc.
    • Вы можете сделать быструю проверку md5sum, чтобы сравнить различия. Или сравнить даты, другие метаданные, чтобы определить, является ли файл новым или измененным
  2. Замените файлы по мере необходимости.
    • Вам может потребоваться заранее обратиться в stopслужбу ( service <servicename> stop), если файлы используются.
  3. Запустите systemctl daemon-reload, чтобы указать systemd «повторно просканировать» служебные файлы на предмет любых изменений.
  4. Перезапускает/запускает соответствующую службу

Затем вы можете загрузить этот скрипт в cron или как таймер systemd для запуска по расписанию.

Связанный контент