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 .service
arquivos. 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:
- 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
- Substitua os arquivos conforme necessário
- Você pode precisar
stop
do serviço (service <servicename> stop
) antecipadamente se os arquivos estiverem em uso.
- Você pode precisar
- Execute
systemctl daemon-reload
para dizer ao systemd para "verificar novamente" os arquivos de serviço em busca de quaisquer alterações. - 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.