Como funcionam os serviços no Debian e como posso gerenciá-los?

79

No Windows, tenho o gerenciador de serviços, onde vejo todos os serviços do sistema, que podem ser iniciados pelo próprio Windows, configuro o usuário que ele usa, o gerenciamento de direitos está lá e posso passar variáveis ​​e outras informações aos serviços , Posso nomeá-los e criar serviços duplicados de um programa e assim por diante. Então, eu tenho uma ferramenta de gerenciamento principal no Windows.

Como posso fazer o mesmo no Linux? Como posso disparar para executar "svnserve" na inicialização ou como posso configurar os serviços para serem executados em um contexto especial. Como posso ver todos os serviços "programados"?

Erdinc Ay
fonte
9
Qual distribuição e versão você está usando? O gerenciamento de serviços (os serviços são quase sempre chamados de daemons no mundo Unix) costumava ser fácil e semi-padrão. As coisas são mais variadas nos dias de hoje. E nem sempre é legal. :) Além disso, o que você quer dizer com contexto ?
Alexs #
Embora pareça que o systemd esteja vencendo lentamente a guerra do sistema init. O Debian é o último grande destaque ainda usando o antigo SysVinit, e está atualmente no processo de determinar com qual sistema init usar.
22413 Patrick
1
Atualmente trabalho com o Debian (mais recente estável), e por contexto quero dizer variáveis ​​de caminho ou um contexto de usuário especificado.
Erdinc Ay
1
Se você só precisa usar servercomando no Debian, veja unix.stackexchange.com/q/226089/130402
Peter Krauss

Respostas:

124

Atualmente existem 3 principais sistemas init usados ​​pelo linux. Alguns anos atrás, havia apenas um, SysVinit. Mas o SysVinit estava seriamente carente de recursos, como gráficos de dependência de serviço, por isso está obsoleto na maioria das distros até agora. Atualmente, a maioria das distros está mudando para systemd . Embora haja também arrivista .

Mas aqui está a resposta para sua pergunta para cada um dos 3 sistemas init:

 

SysVinit

SysVinit atualmente usado pelo Debian e RedHat. Embora a próxima versão do RedHat (7) esteja usando o systemd.

A maneira universal de ativar os serviços SysVinit na inicialização é vinculando-os a /etc/rc3.d(ou /etc/rc2.d). Todos os serviços podem ser encontrados em /etc/init.d. Observe, no entanto, que as distribuições geralmente têm sua própria ferramenta para gerenciar esses arquivos, e essa ferramenta deve ser usada. (O Fedora / RedHat possui servicee chkconfig, o ubuntu possui update-rc.d)

Serviços de lista:

ls /etc/init.d/

Começar serviço:

/etc/init.d/{SERVICENAME} start

ou

service {SERVICENAME} start

Parar serviço:

/etc/init.d/{SERVICENAME} stop

ou

service {SERVICENAME} stop

Ativar serviço:

cd /etc/rc3.d
ln -s ../init.d/{SERVICENAME} S95{SERVICENAME}

( S95é usado para especificar a ordem. S01 começará antes de S02, etc)

Desativar serviço:

rm /etc/rc3.d/*{SERVICENAME}

 

Systemd

A distribuição mais notável usando systemd é o Fedora. Embora seja usado por muitos outros. Além disso, com o Debian optando por usar o systemd em vez de inicializar, ele se tornará o sistema inicial para muitas distribuições (o ubuntu já anunciou que estará iniciando o sistemad).

Serviços de lista:

systemctl list-unit-files

Começar serviço:

systemctl start {SERVICENAME}

Parar serviço:

systemctl stop {SERVICENAME}

Ativar serviço:

systemctl enable {SERVICENAME}

Desativar serviço:

systemctl disable {SERVICENAME}

 

Subir na vida

O Upstart foi desenvolvido pelo pessoal do Ubuntu. Mas depois que o debian decidiu seguir com o systemd , o Ubuntu anunciou que iria lançar o inicio .

O Upstart também foi usado brevemente pelo RedHat, pois está presente no RHEL-6, mas não é comumente usado.

Serviços de lista:

initctl list

Começar serviço:

initctl start {SERVICENAME}

Parar serviço:

initctl stop {SERVICENAME}

Ativar serviço:

2 maneiras, infelizmente:

  1. Haverá um arquivo /etc/default/{SERVICENAME}que contém uma linha ENABLED=.... Mude esta linha para ENABLED=1.

  2. Haverá um arquivo /etc/init/{SERVICENAME}.override. Verifique se ele contém start(ou está ausente), não manual.

Desativar serviço:

echo manual > /etc/init/{SERVICENAME}.override

Nota: Existe também o sistema init 'OpenRC' que é usado pelo Gentoo. Atualmente, o Gentoo é a única distribuição que o utiliza, e não está sendo considerada para uso, nem é suportada por nenhuma outra distribuição. Portanto, não estou cobrindo seu uso (embora, se a opinião é minha, posso adicioná-lo).

Patrick
fonte
O OpenRC é uma espécie de abstração para o SysVinit. Não o substitui, ele adiciona a ele.
Spidey
Great writeup! Apenas algumas correções menores: o RHEL 6.x (e, portanto, o CentOS 6.xe o restante dos derivativos) usa upstart, como o Ubuntu (embora a maioria dos serviços ainda use scripts SysV). Além disso, eu acrescentaria que "chkconfig" (RH) e "update-rc.d" (Debian) são as formas "oficiais" de adicionar links aos diretórios rc? .D.
rsuarez
@rsuarez bom ponto sobre a coisa RHEL6. Embora pouco pareça usá-lo. A maior parte do sistema ainda é executada via SysVinit legado (17 inicial, 89 SysVinit em um dos meus sistemas RHEL6). E chkconfige update-rc.dsão mencionados. Veja o segundo parágrafo em SysVinit :-)
Patrick
@Patrick concorda em # 1; "opa!" # 2 :-)
rsuarez
1
Obrigado pela resposta abrangente, agora eu tenho uma visão geral. Atualmente estou usando o Debian (mais recente estável), aqui na Europa de língua alemã ele tem as melhores recomendações, mas talvez eu tente o Redhat.
Erdinc Ay
9

Distribuições diferentes usam mecanismos diferentes para gerenciar serviços. O software para gerenciar serviços é chamado init , após o nome tradicional do primeiro processo (com o ID do processo 1), responsável por iniciar os outros.

O Debian usa a variante tradicional SysVinit do init. Sob esse sistema, há uma coleção de scripts no diretório /etc/init(esse e outro local podem variar um pouco entre as distribuições que usam o SysVinit). Esses scripts não são chamados diretamente, mas através de links simbólicos nos diretórios /etc/rc?.d. É a presença e o nome desses links simbólicos que determinam quando os serviços são iniciados. Para mais detalhes, leia o capítulo sobre init na Referência Debian .

Dê uma olhada /etc/rc?.dpara ver quais serviços já estão presentes. A letra ou o dígito antes do ponto é o nível de execução; as entradas cujo nome começa Ssão executadas com o argumento startao entrar no nível de execução e as entradas cujo nome começa Ksão executadas ao sair do nível de execução. A sequência normal do nível de execução é: S durante a inicialização ( /etc/rcS.d/S*são executadas) e 2 ( /etc/rc2.d/S*são executadas). No momento do desligamento, /etc/rc2.d/K*são executados, o nível de execução muda para 0 (ou 6 para uma reinicialização).

Em poucas palavras, se você deseja criar um script de inicialização para um novo serviço:

  • Escreva um script de shell em /etc/init.d. Este script deve aceitar um argumento que pode ser start, stop, force-reload, restart, ou (opcional) reloadou status. A diferença entre reloade restarté restartequivalente a stopseguida por startenquanto reloadrecarrega a configuração sem interromper nada (se o serviço suportar); force-reloadfaz reloadse disponível e restartde outra forma. Veja os arquivos existentes e Fazendo scripts rodarem no momento da inicialização com o Debian para exemplos.
  • Execute update-rc.dpara criar links simbólicos para iniciar e parar seu serviço. A maioria dos serviços é executada nos níveis 2, 3, 4 e 5.

Observe que, para fornecer acesso ao svn, pode ser mais fácil configurar o Apache e usar o protocolo HTTP ou HTTPS. Isso tem o benefício de permitir a navegação rápida no repositório através de um navegador da web.

Gilles
fonte
2

De um plano tradicional de unix, não há nada de especial em serviços. Os serviços são apenas processos, mas com duas exceções: eles não precisam de um terminal e começam na inicialização. como eles são iniciados na inicialização depende do init (que pode ser sysv init, bsd init, upstart, systemd ou outra coisa; verifique sua página de manual quanto ao init) e se você está usando um wrapper para a tarefa ou para a configuração init. Não há nada que o impeça de executar um serviço a partir de um terminal; na verdade, isso é comum para fins de teste.

hildred
fonte