Configure pedidos de serviços systemd

2

Eu tenho dois serviços que normalmente não são relacionados entre si: JBoss e WebSphereMQ.

Agora, como um aplicativo implementado no JBoss requer o WebSphereMQ, eu gostaria de configurar o JBoss para ser iniciado após o WebSphereMQ.

Como os arquivos de scripts / serviços vêm do gerenciador de pacotes, gostaria de evitar editá-los.

O Systemd permite a configuração local de Wants e Requires usando links simbólicos para serviços dentro dos diretórios ${service}.wants / ${service}.requires No entanto, de acordo com a documentação Requires não força a ordem, acho que o mesmo se aplica a Wants (a documentação não é explícita nesse ponto), mas não há uma funcionalidade baseada em links simbólicos equivalente para a configração de After e Before .

Como posso definir essa relação sem editar arquivos instalados pelo rpm?

    
por Marcin Wisnicki 28.05.2015 / 14:46

1 resposta

3

Sua pergunta contém dois problemas separados: (a) como traduzir a dependência de serviços para a sintaxe dos arquivos da unidade systemd e (b) como alterar as definições das unidades sem alterar os arquivos da unidade fornecidos pelo fornecedor do software.

Quanto a (a), você observa corretamente que deseja After= keyword. O arquivo de unidade do JBoss deve conter ambos After=<WebSphereMQ unit name> e Wants=<WebSphereMQ unit name> . O motivo para isso é: dependências funcionais entre unidades e ordem de início de unidades são variáveis / dimensões separadas. Às vezes, você deseja que o serviço A seja iniciado toda vez que o serviço B for iniciado, e é para isso que Wants= e Requires= servem. Às vezes, você deseja que o serviço A seja iniciado após o serviço B, se o serviço B já estiver na fila; é para isso que After= e Before= são. Normalmente você quer os dois.

Quanto a (b), você precisa usar o recurso chamado "drop-ins". Eles estão disponíveis no systemd desde o início, mas a documentação estava espalhada em muitas páginas do manual e difíceis de encontrar. Isso mudou em uma das versões mais recentes (219, creio eu), quando a descrição detalhada foi adicionada perto do final de man systemd.unit .

Drop-ins são pequenos bits de configuração que substituem partes da definição de unidade existente. Seu objetivo é permitir que o administrador do sistema faça alterações locais sem precisar substituir o arquivo de unidade fornecido pelo fornecedor do software (portanto, as atualizações de software são um pouco mais fáceis, pois você não precisa se preocupar com o gerenciador de pacotes que sobrescreve suas alterações).

Os drop-ins são arquivos de texto com nomes que terminam com .conf e são colocados no diretório <unit name>.d .

No seu caso, você quer criar o diretório /etc/systemd/system/jboss.service.d/ (assumindo que o JBoss vem com jboss.service unit file) e então criar o arquivo webspheremq.conf com o seguinte conteúdo:

[Unit]
Wants=WebSphereMQ
After=WebSphereMQ

Depois de recarregar a configuração do systemd ( systemctl daemon-reload ), você deverá ver as alterações em systemctl show jboss.service e systemctl status jboss.service . Aqui está o que você pode esperar do segundo comando (observe a linha "Drop-In"):

[email protected] - rsnapshot monthly backup
   Loaded: loaded (/etc/systemd/system/[email protected]; static)
  Drop-In: /etc/systemd/system/[email protected]
           └─after.conf
   Active: inactive (dead)
    
por 23.06.2015 / 22:18

Tags