Привет, ребята из безупречного сервера!
Я хотел бы написать службу systemd, которая может обновляться сама.
В частности, каждые 5 минут он должен проверять Amazon S3 на наличие новых версий своих двоичных файлов и .service
файлов. Если они были обновлены, он должен загрузить и заменить их, а затем перезапустить себя.
К сожалению, насколько я понимаю, systemd не позволяет изменять используемые файлы.
Есть ли какой-то стандартный способ добиться этого?
Спасибо!
EDIT: Чтобы прояснить, я спрашиваю, возможно ли сделать это с помощью одной службы. Я понимаю, что могу иметь пару служб, которые обновляют друг друга, но это кажется неэлегантным.
решение1
Обновление файлов, связанных с файлами systemd .service или исполняемыми файлами программ, аналогично обновлению любого другого файла.
На самом деле вам следует сделать это с помощью средства управления конфигурацией, например Ansible, но чтобы сделать это как есть, ваш общий рабочий процесс может включать использование скрипта bash/python, который выполняет следующие действия:
- Получает файл(ы) с веб-сервера/s3/etc.
- Вы можете сделать быструю проверку md5sum, чтобы сравнить различия. Или сравнить даты, другие метаданные, чтобы определить, является ли файл новым или измененным
- Замените файлы по мере необходимости.
- Вам может потребоваться заранее обратиться в
stop
службу (service <servicename> stop
), если файлы используются.
- Вам может потребоваться заранее обратиться в
- Запустите
systemctl daemon-reload
, чтобы указать systemd «повторно просканировать» служебные файлы на предмет любых изменений. - Перезапускает/запускает соответствующую службу
Затем вы можете загрузить этот скрипт в cron или как таймер systemd для запуска по расписанию.