Como executo um serviço com numactl

3

Eu preciso fazer algo assim para executar o MongoDB

$numactl --interleave=all /usr/bin/mongod --config /etc/mongod.conf &

O que devo mudar para poder executar o daemon mongo com as opções acima?

    
por Bob 01.03.2015 / 01:55

1 resposta

3

Depende de como você está gerenciando seus serviços.

Com um gerente de serviço da família daemontools, apenas isso.

Seu programa atual run basicamente se resumirá a

#!/bin/nosh
chdir /
setuidgid mongodb
mongod

Este é, de fato, o programa muito básico do MongoDB run que vem no pacote regular de serviços da minha suíte nosh , que não usa um shell como interpretador de scripts. interpretados em shell run scripts para serviços gerenciados pelo daemontools como aquele usado pelo contegix ou O de Yoshiaki Kawazu pode parecer mais complexo, mas todos acabam tendo um comando exec setuidgid mongodb mongod em algum lugar , mesmo que esteja oculto por trás das expansões de variáveis do shell.

Com os gerentes de serviço da família daemontools, run programas como estes são, na essência, sequências simples de comandos de carregamento em cadeia. O programa numactl também é um comando de carregamento em cadeia, que modifica as configurações de seu próprio processo, depois acorrenta a um programa chamado em sua linha de comando. Ele se encaixa bem com as ferramentas daemontools, como setuidgid .

Então você acabou de adicionar numactl na cadeia, que seria

#!/bin/nosh
chdir /
numactl --interleave=all --
setuidgid mongodb
mongod
em um script nosh ou
exec \
numactl --interleave=all -- \
setuidgid mongodb \
mongod
em um script de shell. (Em um script de shell, você pode fazer com que o script tente detectar automaticamente a presença de numactl . Basta clicar no mecanismo do povo iniciante, abaixo.)

Em seguida, basta reiniciar o serviço com (apenas nosh)

system-control condrestart mongod.service
ou com

svc -t /service/mongodb
se você estiver usando o diretório daemontools /service convencional antigo.

Com o systemd, apenas isso.

No seu arquivo de unidade mongod.service , haverá uma seção com

[Service]
User=mongodb
ExecStart=/usr/local/bin/mongod $OPTIONS run

Isso é o que você encontrará em a unidade de serviço systemd que é fornecida com o mongodb , que é um pouco, mas não muito mais complexo.

Então, faça o que você sugeriu e modifique a configuração ExecStart :

ExecStart=/usr/bin/numactl --interleave=all -- /usr/local/bin/mongod $OPTIONS run

Coloque isso em um arquivo de unidade /etc/systemd/service/mongod.service de substituição para substituir completamente o arquivo de unidade fornecido pelo pacote ou retenha o arquivo de unidade fornecido pelo pacote e use uma substituição apenas para essa configuração em (digamos) /etc/systemd/service/mongod.service.d/numactl.conf .

Em seguida, basta recarregar a unidade de serviço do (s) arquivo (s) com

systemctl daemon-reload
e reinicie o serviço com

systemctl condrestart mongod.service

Com o upstart, nada mesmo.

As respostas no link no AskUbuntu estão chegando aos 2 anos de idade, agora. Nesse meio tempo, a numactl capacidade foi colocada em o arquivo de trabalho inicializado fornecido pelo pacote .

Então o seu sistema, presumindo que esteja atualizado, já deveria estar fazendo isso e você não deveria precisar de um

initctl restart mongodb

Leitura adicional

por 01.03.2015 / 14:23