Confuso sobre “/etc/init.d” e serviços em “/ lib / systemd / system”

14

Eu sou completamente novo no mundo linux, então sinto muito por qualquer coisa errada que eu possa dizer.

Estou tentando executar um banco de dados Mongo em uma máquina Debian 8.5. Quando eu instalei o pacote (pré construído a partir de percona.com), notei os seguintes arquivos:

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

Sobre /etc/init.d/mongod

Eu entendo que isso é chamado (desde que seja registrado via update-rc.d ) na inicialização / em outros estados do sistema em particular (não quero ser técnico sobre isso, estou absorvendo muitas informações e isso parece menos importante).

Isso está perfeitamente bem para mim. O script faz muita inicialização e finalmente inicia o daemon mongo. Parece ter "gatilhos" para iniciar, parar, reiniciar, etc e, tanto quanto eu entendo eu posso acionar aqueles com sudo service mongod <action> .

Sobre /lib/systemd/system/mongod.service

Este arquivo parece fazer a mesma coisa (ou seja, executar mongo), mas com menos configuração, apenas uma linha no parâmetro ExecStart:

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

Até onde eu sei, isso pode ser acionado com sudo systemctl start mongod .

  • Eu não entendo se isso é chamado na inicialização ou não.

  • Eu não entendo por que a necessidade de dois desses arquivos de 'service', e como eu posso me livrar de um (possivelmente aquele em / lib / systemd, já que é muito mais simples).

  • Eu não entendo se há alguma relação entre os dois.

  • Eu li que systemctl também funciona em init.d scripts e, nesse caso, não entendo qual dos dois arquivos será acionado por systemctl mongod start .

Eu acho que há alguma redundância e eu deveria escolher apenas uma das duas formas. E eu quero ter certeza de que é

  • chamado no boot
  • que pode ser chamado por comando (como service ou systemctl ).

Você poderia me ajudar a limpar minha mente? Com a ajuda de alguns comentários, posso provavelmente concentrar-me e refinar a questão.

    
por natario 02.09.2016 / 22:17

1 resposta

11

Quando você tiver um script init.d e um arquivo systemd .service com o mesmo nome, o systemd usará o arquivo de serviço para todas as operações. Eu acredito que o comando service apenas irá redirecionar para o systemd. O script init.d será ignorado.

Use systemd . É novo no Debian 8, mas é o padrão. Os arquivos de serviço Systemd são supostos para parecerem mais simples que os scripts init.d. Você não mencionou nenhum recurso específico necessário que não seja suportado pelo serviço systemd.

Se o arquivo de serviço não foi incluído, systemd ficaria feliz em usar o script init.d. Então o desenvolvedor do pacote mongod está dizendo que eles acham que essa definição é melhor:).

Veja a saída de systemctl status mongod . Se o serviço estiver ativado para ser iniciado no momento da inicialização, a linha Loaded: mostrará "ativado". Caso contrário, você pode usar systemctl enable mongod . Você também pode incluir a opção --now e ela será iniciada ao mesmo tempo.

    
por 02.09.2016 / 22:55