Eu tenho um aplicativo que deve ter atualizações ocasionais. Pelos meus pecados, é um aplicativo .Net Core rodando no Centos como um serviço systemd. Espera-se que o serviço esteja disponível funcionando mais ou menos 24/7 por longos períodos (meses / anos).
Eu preciso atualizá-lo remotamente. Eu realmente tenho um mecanismo - ele baixa um RPM quando disponível, gera um shell e inicia um script de bash nohup, incluindo yum -y localinstall <rpm name>
, e então sai. O arquivo de especificação rpm do script bash é descompactado em um novo diretório /usr/bin/appname-<version number>
e, quando concluído, move um link simbólico /usr/bin/appname
para apontar para o novo diretório. Um systemctl restart <appname>
conclui o processo e o diretório é referenciado pelo link simbólico.
Portanto, se o aplicativo for 'foo', eu tenho /usr/bin/foo_1.2.3.4
, com o link simbólico /usr/bin/foo
apontando para ele.
Isso realmente funciona muito bem. No entanto, o gerenciamento não está satisfeito com o esquema de diretórios com versão. Fui solicitado a verificar se isso é considerado uma prática aceitável. Se não, qual é prática padrão? Em teoria, eu poderia desligar o serviço, escrever tudo em /usr/bin/appname
(não um symlink) e reiniciá-lo a partir do script bash, mas estou tentando não ter um diretório contendo arquivos de diferentes versões no mesmo tempo.