5. Inicialização e desligamento de um daemon simples

Dissemos anteriormente que o rc.subr(8) poderia fornecer métodos padrão. Obviamente, estes padrões não podem ser muito gerais. Eles são adequados para o caso comum de iniciar e encerrar um programa daemon simples. Vamos supor agora que precisamos escrever um script rc.d para um daemon chamado mumbled. Aqui está:

#!/bin/sh

. /etc/rc.subr

name=mumbled
rcvar=mumbled_enable

command="/usr/sbin/${name}"1

load_rc_config $name
run_rc_command "$1"

Agradavelmente simples, não é? Vamos examinar nosso pequeno script. A única coisa nova a observar é o seguinte:

1

A variável command é significativa para o rc.subr(8). Se estiver definido, o rc.subr(8) agirá de acordo com o cenário de servir um daemon convencional. Em particular, os métodos padrão serão fornecidos para tais argumentos: start, stop, restart, poll, e status.

O daemon será iniciado executando $command com os sinalizadores de linha de comando especificados por $mumbled_flags. Assim, todos os dados de entrada para o método padrão start estão disponíveis nas variáveis configuradas pelo nosso script. Ao contrário do start, outros métodos podem requerer informações adicionais sobre o processo iniciado. Por exemplo, stop deve conhecer o PID do processo para terminá-lo. No presente caso, rc.subr(8) varrerá a lista de todos os processos, procurando por um processo com seu nome igual a $procname. Esta última é outra variável de significado para rc.subr(8), e seu valor é padronizado para command. Em outras palavras, quando definimos o command, procname é efetivamente definido para o mesmo valor. Isso permite que nosso script mate o daemon e verifique se ele está sendo executado em primeiro lugar.

Nota:

Alguns programas são, na verdade, scripts executáveis. O sistema executa esse script iniciando seu interpretador e passando o nome do script para ele como um argumento de linha de comando. Isso é refletido na lista de processos, que podem confundir o rc.subr(8). Você também deve definir o command_interpreter para permitir que o rc.subr(8) saiba o nome real do processo se o $command é um script.

Para cada script rc.d, existe uma variável rc.conf() que tem precedência sobre command. Seu nome é construído da seguinte forma: ${name}_program, onde name é a variável obrigatória que discutimos anteriormente. Por exemplo, neste caso, será mumbled_program . É rc.subr(8)que organiza${name}_program para substituir o comando.

Obviamente, o sh(1) permitirá que você defina ${name}_program a partir do rc.conf (5) ou o próprio script, mesmo que o command esteja indefinido. Nesse caso, as propriedades especiais de ${name}_program são perdidas e se tornam uma variável comum que seu script pode usar para seus próprios propósitos. No entanto, o uso exclusivo de ${name}_program é desencorajado porque usá-lo junto com o command tornou-se um idioma na escrita de scripts rc.d.

Para obter informações mais detalhadas sobre métodos padrões, consulte rc.subr(8).

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