Ativar automaticamente os serviços systemd instalados usando deb?

3

Estou criando um monte de serviços para instalar em servidores próprios (criados automaticamente). Estou migrando do upstart no Ubuntu 14.04, onde os serviços são habilitados por padrão (temos que fazer um trabalho extra se não quisermos iniciar quando instalado), para o Ubuntu 16.04 onde queremos usar o systemd como o novo serviço nativo framework.

Os serviços são instalados usando pacotes deb que estou criando. Eu atualizei a criação do deb adicionando --with systemd a rules e adicionando um package-name.service com uma especificação de unidade do systemd.

O problema que encontrei é que, mesmo se eu adicionar uma seção [Install] com WantedBy=multi-user.target , o serviço não será iniciado no sistema.

Em vez disso, o serviço é instalado e, em seguida, systemctl status package-name :

● package-name.service - My Service
   Loaded: loaded (/lib/systemd/system/package-name.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

Eu não tenho nenhuma substituição do systemd no meu rules , que, como eu entendi do embalagem com a página do systemd , bem como a página man do dh_systemd_enable que eu posso usar para não ativar serviços se eu optar por não fazê-lo.

Também da aparência da exibição de status, parece que dh-systemd habilitou os serviços (o bit predefinido do fornecedor), mas isso não foi suficiente. O que estou perdendo?

    
por Guss 06.04.2016 / 10:20

3 respostas

1

Eu trabalhei em torno do problema chamando dh_systemd_enable (para fazer o serviço ser executado por padrão) e dh_systemd_start (para realmente iniciá-lo após a instalação) manualmente a partir do destino override_dh_auto_install nas regras, então é assim:

%:
    dh $@ --with-systemd

override_dh_auto_install:
    dh_auto_install
    dh_systemd_enable || true
    dh_systemd_start || true
    
por 05.07.2017 / 16:08
4

Na verdade, você não precisa adicionar nada em override_dh_auto_install .

Você precisa de --with systemd (sem o traço entre with e systemd ) no rules e o pacote dh-systemd instalado.

    
por 01.08.2017 / 22:21
0

Eu me deparei com esse problema também. Acontece que dh_systemd_enable tem certas expectativas sobre o conteúdo de um arquivo foo.service .

Você pode ver isso nas linhas 187-215 de deb-systemd-helper .

Em particular, garantir que o arquivo foo.service tenha uma seção [Install] e tenha pelo menos um campo Alias onde o alias NÃO seja igual a foo.service fará com que a chamada para deb-systemd-helper enable detecte o serviço necessário . Se você quiser que o serviço seja iniciado automaticamente, adicionar WantedBy=multi-user.target também é necessário.

Abaixo está uma versão ligeiramente modificada do meu arquivo foo.service :

[Unit]
Description=foo service, foos
After=bar.service
Requires=bar.service

[Service]
ExecStart=/path/to/my/script/foo
Restart=always
RestartSec=5

[Install]
Alias=foo
WantedBy=multi-user.target

Consegui determinar isso ativando alguns sinalizadores de depuração e adicionando instruções de depuração no script deb-systemd-helper perl. Em um sistema Ubuntu 16.04 eu encontrei aqui: /usr/bin/deb-systemd-helper .

Então executar repetidamente o seguinte e adicionar instruções de depuração me levou ao fim do problema.

$ sudo DPKG_MAINTSCRIPT_PACKAGE=1 _DEB_SYSTEMD_HELPER_DEBUG=1 deb-systemd-helper enable foo.service

    
por 05.11.2018 / 17:56