[FUG-BR] [OFF-TOPIC] Ordem de execução de scripts no boot

Airton Arantes airton.arantes em gmail.com
Sexta Novembro 11 22:16:45 BRST 2011


2011/11/11 Cleyton Agapito <cragapito em gmail.com>

> Em 11 de novembro de 2011 21:02, Alex <alexbbastos em gmail.com> escreveu:
> > Prezados, boa noite.
> >
> > Recentemente me deparei com uma questão, que posteriormente se desdobrou
> em
> > três, e que gostaria de saber a opinião especializada de vocês sobre o
> > assunto.
> >
>
> Bom, longe de ser especializada o que pretendo colocar é uma
> experiência que tive com esse assunto.
>
> > A questão original é essa:
> >
> > 1 - Você criou um script que deve ser executado no boot após todos os
> > outros processos terem sido executados. Qual a melhor forma de
> implementar
> > isso?
> >
>
> Dê uma olhada no manual do rcorder(8), herança do NetBSD, vc põe no
> script que ele só vai rodar depois (ou antes) de alguma condição (ter
> rede, ter login, etc), o script fica um pouquinho mais complexo mas o
> sistema "se vira" pra executar na ordem correta, no caso o rc.conf
> precisa "habilitar" o serviço (ou script), se não tiver nada em
> contrário no /etc/rc.conf são executados por default os do
> /etc/defaults/rc.conf.
>
> >
> > As duas que sequenciaram são essas:
> >
> > 2 - Existem diferenças entre como a questão anterior pode ser tratada nos
> > BSD's (incluindo o FreeBSD) e nos Linux's (se considerar todas as suas
> > inúmeras distribuições, ou pelo menos as mais "famosas")?
> >
>
> Sim, o linux usa o jeito AT&T de fazer, basicamente vc tem diretórios
> chamados runlevels que possuem links pro init.d, cada link começa com
> um número e eles são executados nessa ordem, os scripts ficam mais
> simples mas a administração mais trabalhosa, o método BSD é muito mais
> inteligente (e complexo).
>
> > 3 - Poderia ser aceita como uma possível resposta da questão 1 afirmar
> que
> > a solução seria inserir o comando que aciona o script no arquivo
> > /etc/rc.conf, *no final do arquivo*, uma vez que a ordem da disposição
> das
> > linhas dos mesmos importa e faz diferença, como por exemplo em servidores
> > de e-mail, em que é extremamente recomendável que o antivírus (Ex:
> ClamAV)
> > seja iniciado antes do SMTP (Ex: Postfix) justamente pela ordem de
> > execução/inicialização dos mesmos?
> >
>
> Não, a ordem é definida por palavras chaves no script (REQUIRE,
> BEFORE, etc), o rcorder controla a sequencia de partida e termino
> baseado nessas chaves independente da ordem dos rc.conf.
>
> >
> > --------------------------------------------
> >
> > Ressalto novamente que o script deve ser iniciado no boot, mas que deve
> ser
> > o último a ser executado dentre todos os outros processos do boot.
>
> Vc pode por "REQUIRE: LOGIN" no script, creio que já atenda a tua
> necessidade mesmo sem garantia de ser o último, ou vc pode ir no
> /etc/rc.d e rodar o rcorder em cima do que possa ser o último a ser
> executado, o ideal é usar como dependência os que estão em maiúsculo,
> daí não tem perigo de desativar uma coisa e parar outra.
>
> > É preciso observar também que em nenhum momento na questão inicial foi
> > especificado o S.O. em que o script seria hipoteticamente executado, por
> > isso pergunto sobre Linux's também e sobre a possível aplicação de uma
> > forma que existe no FreeBSD.
> >
>
> A forma de tratar a partida é completamente diferente, não se se tem
> como implementar uma partida AT&T no BSD, até porque não vejo muita
> utilidade. De qualquer forma se o script precisar rodar nos dois é
> capaz que funcione, coloque as diretivas BSD no arquivo (que pro Linux
> aparecerão como comentários) e no Linux faça os Links simbólicos
> tradicionais, creio que vai dar certo.
>
> > Obs 1: Se puderem/quiserem detalhar as respostas, fiquem à vontade.
>
> Não sei se há necessidade de detalhar, se for o caso dê um grito que a
> gente tenta melhorar :-)
>
> > Obs 2: Admite-se que o já script tenha permissão de execução.
> >
>
> Com certeza, nos dois sistemas a permissão de execução é condição.
>
> Abração!
> -------------------------
> Histórico: http://www.fug.com.br/historico/html/freebsd/
> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
>


Apenas mais um adição, o rc.local é ainda suportado. Você pode colocar a
seguinte linha no seu /etc/rc.conf

local_startup="/usr/local/etc/rc.d/rc.local"

-- 
Airton Arantes Coelho Filho


Mais detalhes sobre a lista de discussão freebsd