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

15

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

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

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

Sobre o /etc/init.d/mongod

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

Isso é perfeitamente bom para mim. O script faz muita inicialização e finalmente inicia o daemon mongo. Parece ter "gatilhos" para iniciar, parar, reiniciar, etc, e até onde eu entendo, posso acioná-los sudo service mongod <action>.

Sobre /lib/systemd/system/mongod.service

Este arquivo parece fazer a mesma coisa (ou seja, executar o 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

Tanto quanto eu entendo isso pode ser desencadeado 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 'serviço' e como posso me livrar de um (possivelmente o arquivo em / lib / systemd, pois é muito mais simples).

  • Não entendo se existe alguma relação entre os dois.

  • Também li que systemctlfunciona em init.dscripts e, neste caso, não entendo quais dos dois arquivos serão acionados systemctl mongod start.

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

  • chamado na inicialização
  • chamável por comando (como serviceou systemctl).

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

natario
fonte

Respostas:

12

Quando você possui um init.dscript e um .servicearquivo systemd com o mesmo nome, o systemd utilizará o arquivo de serviço para todas as operações. Eu acredito que o servicecomando irá apenas redirecionar para systemd. O script init.d será ignorado.

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

Se o arquivo de serviço não fosse incluído, systemdseria bom usar o script init.d. Portanto, o desenvolvedor do pacote mongod está lhe dizendo que eles acham que essa definição do systemd é melhor :).

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

sourcejedi
fonte
Obrigado! Vou estudar o systemd e, eventualmente, usá-lo. Por enquanto, eu queria desabilitar isso e finalmente executar o script init.d no qual estou trabalhando. Eu fui systemctl disable mongod:; renomeou mongod.service para mongod-backup.service; então systemctl daemon-reload. Você acha que isso estava correto? Eu li que você não deve modificar arquivos em / lib / systemd / system /, mas sem renomear, systemctl continuou ignorando o script init.d.
Natario 3/09
Os arquivos em / lib / systemd não são conffiles. Eu realmente não posso recomendar a instalação de um pacote debian e a modificação de seus arquivos (e a atualização posterior do pacote). Em vez disso, você deve renomear o script init.d no qual está "trabalhando" (presumivelmente modificando?). Os scripts init.d tendem a ser conffiles. Se uma atualização alterar um conffile (do qual não deve haver nenhum motivo), ela será avisada primeiro. Nesse caso, eu esperaria que o notificasse se uma versão atualizada do script init.d original (efetivamente) excluído estivesse disponível.
sourcejedi
É possível que você precise adicionar dependências de pedidos em seu novo serviço aos serviços dos quais eles dependem mongod. Há também uma chance de você ter que remover algumas dependências estritas, mas eu não pensaria assim. Uma maneira segura de modificar os serviços afetados é copiá-los /etc/systemd/system/e modificar a cópia.
sourcejedi
Em geral, acho que aderir ao systemd é mais simples. Agora você está estudando os recursos bash, init-functions e back-compat do systemd. Como você não está aprendendo um sistema init puro do SysV, se você já usa esse sistema, há um risco de esperar recursos que realmente vêm do systemd.
sourcejedi 3/09/16