Inicialização em segundo plano com runit

0

Eu mudei recentemente meu sistema de inicialização na minha caixa ARM rodando o Linux 2.6 do sysvinit para rodar com grande sucesso. No entanto, estou tentando ajustar a rotina de inicialização. Eu gostaria de ter algo semelhante a um serviço do sistema 'oneshot'.

Parte da rotina de inicialização é que um disco pode ter que ser formatado e, em seguida, deve ser montado. Um dos serviços do runit depende do disco ser montado. No entanto, o restante dos serviços (por exemplo, sshd) não. Portanto, seria bom se eu pudesse iniciar o procedimento de formatação do disco em segundo plano enquanto o restante do sistema é inicializado. O formato do disco é razoavelmente lento, então pode fazer uma grande diferença no tempo total de inicialização se isso puder ser feito em segundo plano.

Eu tenho um script de formatação de disco /usr/local/bin/format_disk.sh , que formata o disco de maneira confiável, se ainda não estiver formatado (não funciona se já estiver formatado). Estas são as opções que estou considerando atualmente:

  1. Executar sudo /usr/local/bin/format_disk.sh manualmente: isso é o que estou fazendo agora, mas gostaria de automatizar o processo para que eu possa esperar que meu sistema seja totalmente inicializado sem a intervenção do usuário.
  2. Execute /usr/local/bin/format_disk.sh no script /etc/runit/1 : isso não é ideal, pois bloqueia a inicialização dos serviços até que o disco seja formatado.
  3. Crie um serviço runit que execute /usr/local/bin/format_disk.sh e, em seguida, termine / loops / etc .: isso não é o ideal, pois não é um daemon real que precisa permanecer ativo durante o tempo de atividade do sistema. Talvez eu possa fazê-lo correr sv stop em si mesmo?

Seria bom se eu pudesse fazer algo como /usr/local/bin/format_disk.sh & in /etc/runit/1 , mas suspeito que o runit ainda não inicie os serviços até que format_disk.sh termine. Esta suspeita está correta? Existe alguma outra maneira de iniciar um processo em segundo plano em /etc/runit/1 que permitirá que os serviços sejam iniciados?

Qual é a melhor maneira de executar uma etapa de inicialização em segundo plano em um sistema runit?

    
por millinon 18.09.2018 / 00:42

1 resposta

0

Duas opções:

  1. Chame o script do script de execução do serviço dependente. Isso garantirá que o script retorne antes que o serviço seja executado.
  2. Execute o script em segundo plano em /etc/rc.local e faça com que o script toque em um arquivo tmpfs quando terminar a execução. Em seguida, no script de execução do serviço dependente, verifique se esse arquivo existe.
por 08.11.2018 / 02:58

Tags