É possível que um serviço systemd se atualize?

É possível que um serviço systemd se atualize?

Olá pessoal do servidor impecável,

Eu gostaria de escrever um serviço systemd que possa se atualizar.

Especificamente, a cada 5 minutos ele deve procurar no Amazon S3 novas versões de seus binários e .servicearquivos. Se eles foram atualizados, ele deverá baixá-los e substituí-los e, em seguida, reiniciar-se.

Infelizmente, entendo que o systemd não permite a modificação de arquivos em uso.

Existe alguma maneira padrão de conseguir isso?

Obrigado!

EDIT: Para esclarecer, pergunto se é possível fazer isso com um único serviço. Sei que poderia ter um par de serviços que se atualizassem, mas isso parece deselegante.

Responder1

Atualizar arquivos relacionados a arquivos .service do systemd ou executáveis ​​de programas é o mesmo que atualizar qualquer outro arquivo.

Você realmente deveria fazer isso com gerenciamento de configuração como o Ansible, mas para fazer isso como está, seu fluxo de trabalho geral pode usar um script bash/python que faça o seguinte:

  1. Obtém o(s) arquivo(s) do servidor web/s3/etc.
    • Você pode fazer uma verificação rápida do md5sum para comparar as diferenças. Ou compare datas e outros metadados para determinar se o arquivo é novo ou alterado
  2. Substitua os arquivos conforme necessário
    • Você pode precisar stopdo serviço ( service <servicename> stop) antecipadamente se os arquivos estiverem em uso.
  3. Execute systemctl daemon-reloadpara dizer ao systemd para "verificar novamente" os arquivos de serviço em busca de quaisquer alterações.
  4. Reinicia/inicia o serviço em questão

Você pode então carregar esse script no cron ou como um timer do systemd para ser executado de acordo com uma programação.

informação relacionada