A resposta do caos é o que diz alguma documentação. Mas não é o que o systemd realmente faz. (Também não foi o que van Smoorenburg rc
fez. A van Smoorenburgrc
definitivamente não ignorou os cabeçalhos LSB, que insserv
costumavam calcular pedidos estáticos para iniciantes.) A documentação do Freedesktop, como a página "Incompatibilidades", está de fato errada, na verdade. esses e outros pontos. (A HOME
variável de ambiente, na verdade, é frequentemente definida, por exemplo. Isso ficou totalmente sem documentação em qualquer lugar por um longo tempo. Agora está documentada no manual, pelo menos, mas essa página do Freedesktop WWW ainda não foi corrigida.)
O formato de serviço nativo para systemd é a unidade de serviço . o gerenciamento de serviços do systemd propriamente dito opera apenas em termos daqueles, que são lidos em um dos nove diretórios em que os .service
arquivos (em todo o sistema) podem viver. /etc/systemd/system
, /run/systemd/system
, /usr/local/lib/systemd/system
, E /usr/lib/systemd/system
são quatro desses diretórios.
A compatibilidade com os rc
scripts de van Smoorenburg é alcançada com um programa de conversão chamado systemd-sysv-generator
. Este programa está listado no /usr/lib/systemd/system-generators/
diretório e, portanto, é executado automaticamente pelo systemd no início do processo de autoinicialização a cada inicialização e novamente sempre que o systemd é instruído a recarregar sua configuração posteriormente.
Este programa é um gerador , um tipo de utilitário auxiliar cuja tarefa é criar arquivos de unidades de serviço em tempo real, em um tmpfs onde estão localizados mais três desses nove diretórios (que devem ser usados apenas por geradores). systemd-sysv-generator
gera as unidades de serviço que executam os rc
scripts de van Smoorenburg /etc/init.d
, se não encontrar uma unidade de serviço systemd nativa com esse nome já existente nos outros seis locais.
O gerenciamento de serviços systemd conhece apenas unidades de serviço. Essas unidades de serviço (re) geradas automaticamente são gravadas para chamar os rc
scripts de van Smoorenburg . Eles têm, entre outras coisas:
[Unidade]
SourcePath = / etc / init.d / wibble
[Serviço]
ExecStart = / etc / init.d / wibble start
ExecStop = / etc / init.d / wibble stop
A sabedoria recebida é que os rc
scripts de van Smoorenburg devem ter um cabeçalho LSB e são executados em paralelo sem respeitar as prioridades impostas pelo /etc/rc?.d/
sistema. Isso está incorreto em todos os pontos.
Na verdade, eles não precisam de ter um LSB cabeçalho, e não se o fizerem systemd-sysv-generator
podem reconhecer os mais limitados old comment RedHat cabeçalhos ( description:
, pidfile:
e assim por diante). Além disso, na ausência de um cabeçalho LSB, ele retornará ao conteúdo dos /etc/rc?.d
farms de links simbólicos, lendo as prioridades codificadas nos nomes dos links e construindo um pedido antes / depois deles, serializando os serviços. Os cabeçalhos LSB não são apenas um requisito, e eles próprios não apenas codificam pedidos antes / depois que serializam as coisas até certo ponto, como também o comportamento de fallback em sua ausência completa é uma operação significativamente não paralela.
O motivo que /etc/rc3.d
não pareceu importar é que você provavelmente teve esse script ativado por outro /etc/rc?.d/
diretório. systemd-sysv-generator
traduz a ser incluída em qualquer das /etc/rc2.d/
, /etc/rc3.d/
e /etc/rc4.d/
em um nativa Wanted-By
relação ao Systemd de multi-user.target
. Os níveis de execução são "obsoletos" no mundo do sistema e você pode esquecê-los.
Leitura adicional
systemd
e um script /etc/init.d não estiver definido como "boot on start", ele ainda funcionará conforme o esperado, mas não aparecerá no diretório listas show-units: unix.stackexchange.com/a/518894/8337O Systemd é compatível com os scripts de inicialização do SysV. De acordo com o LSB 3.1, o script init deve ter Convenções de Comentários informativas , definindo quando o script deve iniciar / parar e o que é necessário para o script iniciar / parar. Isto é um exemplo:
Esta é uma seção comentada que é ignorada pelo SysV. Por outro lado, o systemd lê essas informações de dependência e executa esses scripts, dependendo disso.
Mas há um ponto em que systemd e SysV diferem em termos de scripts init. O SysV executa os scripts em ordem seqüencial com base no número no nome do arquivo. Systemd não. Se as dependências forem atendidas, o systemd executará os scripts imediatamente, sem respeitar a numeração dos nomes dos scripts. Alguns deles provavelmente falharão devido à encomenda. Existem muitas outras incompatibilidades que devem ser consideradas.
Se houver scripts init e arquivos .service para o mesmo serviço, o systemd executará ambos, assim que as dependências forem atendidas (no caso do script init, aquelas definidas no cabeçalho LSB).
fonte