Até recentemente, havia uma maneira simples e eficaz de iniciar / parar / reiniciar serviços:
service nginx start|stop|restart
Isso funcionou perfeitamente por tantos anos, ... até que alguns smart-pants decidiram melhorá-los e agora estou enfrentando sistemas Debian / Ubuntu nos quais o service
script não faz nada (como eu devo usar as coisas como systemctl start nginx.service
(muito, muito mais, sem trabalho de preenchimento automático, ...)
Minha pergunta se refere especialmente ao Debian e Ubuntu, mas também seria útil para cobrir as distros do CentOS / RedHat.
Então, há algo que pode me salvar dessas mudanças condenadas?
Caso não esteja claro, estou procurando uma maneira consistente de lidar com elas, uma que funcione no Debian 7.x, 8.x, Ubuntu LTS mais recente e não LTS.
PS. Fora do escopo desta pergunta específica, são concedidos elogios extras se a solução também cobrir a parte de habilitar e desabilitar os serviços.
service
comando antigo por um wrapper que chama servicectl?service
realmente não fazem nada para você? Funciona como esperado no meu LMDE (que é basicamente o teste do Debian), não achei que isso fosse específico do LMDE. Também funciona como esperado na minha VM do Ubuntu.Respostas:
Existem vários sistemas de controle de inicialização e serviço variados nas plataformas Unix ao longo de sua história complicada.
O
service\chkconfig
sistema baseado que você achou simples e eficaz geralmente é chamado de estilo SysVinit e foi um passo importante no caminho para algum tipo de padronização. Você encontrará esse estilo de inicialização no RHEL / CentOS (EL) até a versão 6, no Fedora até 14 e nas distribuições baseadas no Debian / Ubuntu até 2015. Não era o único sistema de inicialização disponível, o estilo BSD (mais simples) O sistema init ainda tem muitos fãs.O SysVinit não era uma solução perfeita (o que é?) E o Systemd foi desenvolvido para superar muitos dos problemas; este é o
systemctl
sistema baseado em comando que você está enfrentando agora. Embora não seja universalmente apreciado (as pessoas odeiam mudanças, inchaço, etc.), não há dúvida de que está rapidamente se tornando o padrão defacto na maioria das distribuições.Portanto, olhando imediatamente para frente, a resposta para sua pergunta original é simplesmente:
A maneira padrão de controlar serviços na maioria das distribuições Linux é agora
systemctl
!Quanto tempo isso será verdadeiro é o palpite de alguém; provavelmente apenas até que algo aconteça que seja melhor e se torne amplamente adotado.
Tenho certeza de que haverá invólucros disponíveis para permitir, o seu favorito atual, os
service/chkconfig
comandos para continuar a fazer principalmente coisas sãs, mas com essa curva de aprendizado específica, provavelmente é melhor não lutar contra isso. Talvez ansioso, por um tempo também haverásystemctl
invólucros para sistemas mais antigos, para tornar o gerenciamento deles juntamente com os mais atuais menos trabalhoso;)fonte
… Ou seja, como outros disseram em comentários, o que foi feito há muito tempo .
O
/usr/sbin/service
comando no Debian 8 faz parte do pacote sysvinit-utils. Está presente desde 2009. É uma adição originária do RedHat específica ao Debian ao pacote fonte sysvinit original e, como pode ser visto na leitura do script, reconhece a execução do sistema e a presença de trabalhos iniciais, desenvolvendo comandos parasystemctl
einitctl
( através de seus apelidos), respectivamente. Isso é feito desde 2013.service name action
está amplamente disponível, mesmo em sistemas operacionais não Linux. Até funcionará na maioria dos BSDs, pois eles também têm seus própriosservice
comandos. Há também umservice
comando shim no pacote nosh que se traduz em . Mas …system-control action name
service
comando.service
comandos do BSD têm problemas bem conhecidos de longa data sobre os quais os administradores de sistemas contam histórias de guerra há décadas.Ativar e desativar serviços é uma situação semelhante. Embora o SuSE
chkconfig
programa (disponível empacotado para o Debian e Ubuntu) é muito diferente ao do Fedora um (que está sendo escrito em inteiramente diferentes linguagens de programação, mesmo - um compilado, um interpretado), há um mínimo comum de sintaxe, com ação ser ou . Mas …chkconfig name action
on
off
chkconfig
nos BSDs, pois as ferramentas convencionais para isso sãosysrc
o OpenBSDrcctl enable
e orcctl disable
. Existemchkconfig
ercctl
shims no pacote nosh que são traduzidos para e .system-control enable name
system-control disable name
chkconfig
conhece o systemd e atua como um calço parasystemctl enable
esystemctl disable
. O SuSEchkconfig
não tem conhecimento de systemd.Leitura adicional
script/service
. init-system-helpers. Arquivo fonte Debian.telinit
. Guia nosh . 1.20 Softwares de JdeBP.service
comando . páginas nosh. Softwares de JdeBP.service
. §8 Páginas de manual do FreeBSD.fonte
Não há uma maneira padrão de iniciar e parar serviços no Linux.
Experimente a ferramenta de gerenciamento / orquestração de configurações: Ansible , Chef , Saltstack , Puppet ou o que for.
Você pode iniciar e ativar um serviço com o Ansible:
Dê uma olhada na classe LinuxService no
service
módulo do Ansible :fonte
Seu problema é que o Debian / Ubuntu mudou para o novo
systemd
como um substituto do antigosysvinit
. Pergunte qual é o melhor e você iniciará uma guerra de chamas, mas você sempre pode voltar para o antigosysvinit
; verifique isso se quiser voltar.fonte