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:
- 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.
- 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.
- 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?