¿Es posible que un servicio systemd se actualice solo?

¿Es posible que un servicio systemd se actualice solo?

Hola amigos del servidor impecable,

Me gustaría escribir un servicio systemd que pueda actualizarse solo.

Específicamente, cada 5 minutos debería buscar en Amazon S3 nuevas versiones de sus .servicearchivos binarios y binarios. Si se han actualizado, debería descargarlos, reemplazarlos y luego reiniciarse.

Lamentablemente, entiendo que systemd no permite la modificación de archivos en uso.

¿Existe alguna forma estándar de lograr esto?

¡Gracias!

EDITAR: Para aclarar, pregunto si es posible hacer esto con un solo servicio. Me doy cuenta de que podría tener un par de servicios que se actualicen entre sí, pero eso parece poco elegante.

Respuesta1

Actualizar archivos relacionados con archivos .service de systemd o ejecutables de programas es lo mismo que actualizar cualquier otro archivo.

Realmente deberías hacer esto con la administración de configuración como Ansible, pero para hacerlo tal como está, tu flujo de trabajo general podría usar un script bash/python que haga lo siguiente:

  1. Obtiene los archivos del servidor web/s3/etc.
    • Puede realizar una comprobación rápida de md5sum para comparar diferencias. O compare fechas y otros metadatos para determinar si el archivo es nuevo o modificado
  2. Reemplace los archivos según sea necesario
    • Es posible que necesite stopel servicio ( service <servicename> stop) de antemano si los archivos están en uso.
  3. Ejecute systemctl daemon-reloadpara indicarle a systemd que "vuelva a escanear" los archivos de servicio en busca de cambios.
  4. Reinicia/inicia el servicio en cuestión

Luego puede cargar ese script en cron o como un temporizador systemd para ejecutarlo según una programación.

información relacionada