Depois que um script foi escrito, ele precisa ser integrado em rc.d>
. O passo crucial é instalar o script em /etc/rc.d
(para o sistema base) ou /usr/local/etc/rc.d
(para ports). Ambos <bsd.prog.mk
> e < bsd.port.mk
> fornecer ganchos convenientes para isso, e geralmente você não precisa se preocupar com a propriedade e o modo adequado. Os scripts do sistema devem ser instalados a partir do src /etc/rc.d
através do Makefile
encontrado lá. Os scripts de porta podem ser instalados usando USE_RC_SUBR
conforme descrito em no Manual do Porter.
No entanto, devemos considerar antecipadamente o local do nosso script na sequência de inicialização do sistema. O serviço manipulado pelo nosso script provavelmente depende de outros serviços. Por exemplo, um daemon de rede não pode funcionar sem as interfaces de rede e o roteamento em funcionamento. Mesmo que um serviço pareça não exigir nada, dificilmente pode ser iniciado antes que os sistemas de arquivos básicos tenham sido verificados e montados.
Nós já mencionamos o rcorder(8). Agora é hora de dar uma olhada de perto. Em poucas palavras, o rcorder(8) pega um conjunto de arquivos, examina seu conteúdo e imprime uma lista ordenada por dependência de arquivos do conjunto para stdout
. O objetivo é manter as informações de dependência dentro dos arquivos para que cada arquivo possa falar por si só. Um arquivo pode especificar as seguintes informações:
os nomes das “condições” (o que significa serviços para nós) que ele fornece;
os nomes das “condições” que ele requer;
os nomes das “condições” deste arquivo devem ser executados antes;
palavras-chave adicionais que podem ser usadas para selecionar um subconjunto de todo o conjunto de arquivos (rcorder(8) podem ser instruídos através de opções para incluir ou omitir os arquivos com determinadas palavras-chave listadas.)
Não é surpresa que rcorder(8) possa manipular apenas arquivos de texto com uma sintaxe próxima a de sh(1). Ou seja, linhas especiais compreendidas por rcorder(8) se parecem com comentários sh(1). A sintaxe de tais linhas especiais é bastante rígida para simplificar seu processamento. Veja rcorder(8) para detalhes.
Além de usar linhas especiais do rcorder(8), um script pode insistir em sua dependência de outro serviço apenas iniciando-o forçadamente. Isso pode ser necessário quando o outro serviço é opcional e não será iniciado automaticamente porque o administrador do sistema o desativou por engano no rc.conf(5).
Com este conhecimento geral em mente, vamos considerar o simples script daemon aprimorado com coisas de dependência:
#!/bin/sh # PROVIDE: mumbled oldmumble# REQUIRE: DAEMON cleanvar frotz
# BEFORE: LOGIN
# KEYWORD: nojail shutdown
. /etc/rc.subr name=mumbled rcvar=mumbled_enable command="/usr/sbin/${name}" start_precmd="${name}_prestart" mumbled_prestart() { if ! checkyesno frotz_enable && \ ! /etc/rc.d/frotz forcestatus 1>/dev/null 2>&1; then force_depend frotz || return 1
fi return 0 } load_rc_config $name run_rc_command "$1"
Como antes, a análise detalhada segue:
Esta linha declara os nomes das “condições” que nosso script fornece. Agora, outros scripts podem registrar uma dependência em nosso script por estes nomes. Nota:Geralmente, um script especifica uma única condição fornecida. No entanto, nada nos impede de listar várias condições, por exemplo, por razões de compatibilidade. Em qualquer caso, o nome da condição principal, ou a única, | |
Portanto, nosso script indica quais condições “” são fornecidas por outros scripts dos quais depende. De acordo com as linhas, nosso script pede ao rcorder(8) para colocá-lo após o(s) script(s) fornecendo Nota:A linha Além das condições correspondentes a um único serviço, existem meta-condições e seus scripts “placeholder” usados para garantir que determinados grupos de operações sejam executados antes dos outros. Estes são denotados pelos nomes Tenha em mente que colocar um nome de serviço na linha | |
Como lembramos do texto acima, as palavras-chave do rcorder(8) podem ser usadas para selecionar ou deixar alguns scripts. Ou seja, qualquer consumidor rcorder(8) pode especificar através das opções No FreeBSD, o rcorder(8) é usado por
| |
Para começar, Se você ainda não pode fazer sem |
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.