Posso usar scripts de init do SysV para systemd

1

No Ubuntu 14 eu tenho um monte de SysV init scripts ( /etc/init.d/ ).

Após a migração para o Ubuntu 16, eles realmente não funcionam, pois eu entendo que o Ubuntu 16 gera systemd unit files on the fly. Alguns serviços podem ser iniciados, mas outros não.

Minha ideia é:

  1. realoque os scripts SysV init ( /etc/init.d/ - > /var/lib/my-services/ ) e certifique-se de que os serviços possam ser iniciados por meio deles

  2. crie os arquivos% unitsystemd apropriados ( /etc/systemd/system ) e use scripts% initSysV relocated ( /var/lib/my-services/ )

Posso reutilizar scripts SysV init ou podem conter algo específico para SysV que não funciona para systemd ?

UPDATE # 1: fora da caixa no Ubuntu 16 O Apache2 é fornecido com o script SysV init ( /etc/init.d/apache2 ). Existe um exemplo de systemd para o Apache2?

    
por robert 14.08.2018 / 14:45

2 respostas

2

O systemd tem alguma compatibilidade com versões anteriores, mas não é um para um. Por exemplo, nos scripts init do SysV, você pode adicionar subcomandos personalizados, mas no systemd você não pode.

Na minha experiência, você pode esperar uma depuração adicional ou um comportamento estranho se tentar manter os scripts de inicialização antigos funcionando.

Acho que você economizará tempo a longo prazo, reescrevendo seus scripts de inicialização como arquivos unitários do systemd.

Se você estiver usando software padrão de terceiros, é provável que o projeto já contenha seus próprios arquivos de unidade systemd que você pode usar.

    
por 14.08.2018 / 15:09
0
A compatibilidade do

systemd com scripts init do SysV é fornecida pelo systemd-sysv-generator , que grava unidades systemd rapidamente chamando o script init com argumentos apropriados para implementar start / stop / reload.

Para fazer o seu trabalho, o systemd-sysv-generator depende strongmente do Cabeçalhos de LSB do script de init do SysV, que se parece com isto:

### BEGIN INIT INFO
# Provides: lsb-ourdb
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop OurDB
# Description: OurDB is a very fast and reliable database
#    engine used for illustrating init scripts
### END INIT INFO

Se o seu script de init do SysV não tiver cabeçalhos LSB apropriados, é provável que o systemd-sysv-generator não consiga convertê-lo automaticamente em uma unidade do systemd ...

As unidades geradas pelo systemd-sysv-generator serão armazenadas em /run/systemd/system , assim você pode procurar o arquivo *.service lá, ou apenas usar o comando systemctl cat para listar o conteúdo da unidade. Você também pode potencialmente adicionar substituições a unidades geradas a partir de scripts init do SysV, usando o comando systemctl edit . (Isso é útil, por exemplo, se você quiser adicionar dependências adicionais ou ordenar diretivas para a unidade.)

Mas talvez mergulhar e converter os scripts init do SysV em unidades nativas do systemd seja uma abordagem melhor e seja rentável a longo prazo, especialmente se o comando puder ser executado em primeiro plano (e não daemonizar) e os scripts init do SysV forem daemonizing os comandos em si (nesse caso, o systemd pode fazer um trabalho melhor e trabalhar melhor se ele daemoniza os comandos em si.)

Confira este artigo na Fedora Magazine para dicas e truques sobre como converter scripts init do SysV em systemd unidades, espero que isso ajude você a começar. Não hesite em perguntar aqui para mais detalhes, se você ficar perplexo ao tentar converter os scripts de inicialização. Boa sorte!

    
por 15.08.2018 / 06:54