FreeBSD Handbook/Administração/Configuração e Ajuste/Usando rc no FreeBSD

11.7 Usando rc no FreeBSDEditar

Em 2002 o FreeBSD integrou o sistema de inicialização rc.d do NetBSD. Os usuários podem observar os arquivos no diretório /etc/rc.d. Muitos destes arquivos são para serviços básicos que podem ser controlados com os parâmetros start, stop e restart. Por exemplo, o sshd(8) pode ser reinicializado com o seguinte comando:

 # /etc/rc.d/sshd restart

Este procedimento é similar para outros serviços. Naturalmente os serviços normalmente são inicializados como especificado no rc.conf(5). Por exemplo, habilitar o daemon do Network Address Translation na inicialização é tão simples quanto adicionar a seguinte linha no /etc/rc.conf:

 natd_enable="YES"

Se a linha natd_enable="NO" já existe, então simplesmente mude a opção NO para YES. Os scripts rc automaticamente carregarão outros serviços dependentes durante a próxima inicialização, como descrito abaixo.

Uma vez que o sistema rc.d foi feito primariamente para iniciar/parar serviços na inicialização/desligamento do sistema, os parâmetros start, stop e restart somente cumprirão suas funções se as variáveis apropriadas estiverem configuradas no /etc/rc.conf. Por exemplo, o comando sshd restart acima só funcionará se sshd_enable estiver configurado para YES no /etc/rc.conf. Para iniciar (start), parar (stop) ou reiniciar (restart) um serviço, independente das configurações em /etc/rc.conf, os comandos devem ter o prefixo "one". Por exemplo, para reiniciar o sshd independente da configuração atual no /etc/rc.conf, execute o seguinte comando:

 # /etc/rc.d/sshd onerestart

É fácil verificar se um serviço está habilitado no /etc/rc.conf, basta executar o script rc.d com o parâmetro rcvar. Desta forma, o administrador pode verificar se o sshd está de fato habilitado no /etc/rc.conf com o comando:

 # /etc/rc.d/sshd rcvar
 # sshd
 $sshd_enable=YES

Nota: A segunda linha (# sshd) é a saída do comando sshd, não um console root.

Para determinar se o serviço está no ar, use o parâmetro status. Por exemplo, para verficar se o sshd está no ar:

 # /etc/rc.d/sshd status
 sshd is running as pid 433.

Também é possível recarregar (reload) um serviço. Este parâmetro tentará enviar um sinal para um serviço em particular, forçando uma recarga dos arquivos de configuração. Em muitos casos isto significa enviar um sinal SIGHUP para o serviço. O suporte a essa funcionalidade não está disponível para todos os serviços.

A estrutura do rc.d não é apenas usada para serviços de rede, também contribui em grande parte para a inicialização do sistema. Por exemplo, considere o arquivo bgfsck. Quando este script for executado imprimirá a seguinte mensagem:

 Starting background file system checks in 60 seconds.

Portanto, este arquivo é usado para checagem do sistema de arquivos em segundo plano, que é feita apenas durante a inicialização.

Muitos serviços de sistema dependem de outros serviços para funcionar corretamente. Por exemplo, NIS e outros serviços baseados em RPC podem falhar durante a inicialização até que o serviço rpcbind (portmapper) tenha sido iniciado. Para resolver esta questão, informações sobre dependência e outros meta-dados estão incluídos no topo de cada script de inicialização. O programa rcorder(8) é usado para analisar estes comentários durante a inicialização do sistema para determinar a ordem na qual os serviços de sistema devem ser invocados para satisfazer as dependências.

As seguintes palavras devem ser incluídas em todos os scripts de inicialização (elas são requeridas pelo rc.subr(8) para “habilitar” o script de inicialização):

PROVIDE: Especifica os serviços que este arquivo oferece.

As seguintes palavras podem ser incluídas no topo de cada script de inicialização. Elas não são estritamente necessárias, mas são úteis como dicas para o rcorder(8):

REQUIRE: Lista os serviços que são necessários para este serviço. Este arquivo será executado depois dos serviços especificados.
BEFORE: Lista os serviços que dependem deste serviço. Este arquivo será executado antes dos serviços especificados.

Definindo corretamente estas palavras-chave para cada script de inicialização, um administrador tem um alto nível de controle das ordens de inicialização dos scripts, sem o estresse dos "runlevels" como em outros sistemas operacionais UNIX®.

Informações adicionais sobre o sistema rc.d podem ser encontradas nas páginas de manual do rc(8) e do rc.subr(8). Se você estiver interessado em escrever seus próprios scripts rc.d ou melhorar os existentes, você também pode achar este artigo útil.