Vamos adicionar um pouco de carne aos ossos do script anterior e torná-lo mais complexo e cheio de funcionalidades. Os métodos padrões podem fazer um bom trabalho para nós, mas podemos precisar ajustar alguns dos seus aspectos. Agora vamos aprender como ajustar os métodos padrões para as nossas necessidades.
#!/bin/sh . /etc/rc.subr name=mumbled rcvar=mumbled_enable command="/usr/sbin/${name}" command_args="mock arguments > /dev/null 2>&1"pidfile="/var/run/${name}.pid"
required_files="/etc/${name}.conf /usr/share/misc/${name}.rules"
sig_reload="USR1"
start_precmd="${name}_prestart"
stop_postcmd="echo Bye-bye"
extra_commands="reload plugh xyzzy"
plugh_cmd="mumbled_plugh"
xyzzy_cmd="echo 'Nothing happens.'" mumbled_prestart() { if checkyesno mumbled_smart; then
rc_flags="-o smart ${rc_flags}"
fi case "$mumbled_mode" in foo) rc_flags="-frotz ${rc_flags}" ;; bar) rc_flags="-baz ${rc_flags}" ;; *) warn "Invalid value for mumbled_mode"
return 1
;; esac run_rc_command xyzzy
return 0 } mumbled_plugh()
{ echo 'A hollow voice says "plugh".' } load_rc_config $name run_rc_command "$1"
Argumentos adicionais para Nota: Nunca inclua opções tracejadas, como | |
Um daemon de boas maneiras deve criar um pidfile para que seu processo possa ser encontrado com mais facilidade e confiabilidade. A variável Nota:De fato, o rc.subr(8) também usará o pidfile para ver se o daemon já está em execução antes de iniciá-lo. Esta verificação pode ser ignorada usando o argumento | |
Se o daemon não puder ser executado a menos que existam certos arquivos, apenas liste-os em Nota:O método padrão de rc.subr(8) pode ser forçado a ignorar as verificações de pré-requisitos usando | |
Podemos personalizar sinais para enviar para o daemon caso eles sejam diferentes dos mais conhecidos. Em particular, Nota:Os nomes dos sinais devem ser especificados para o rc.subr(8) sem o prefixo | |
Realizar tarefas adicionais antes ou depois dos métodos padrão é fácil. Para cada argumento de comando suportado pelo nosso script, podemos definir o argumento Nota:Sobrescrever um método padrão com um Não se esqueça de que você pode amontoar qualquer expressão válida do sh(1) nos métodos, pré e pós-comandos definidos por você. Apenas invocar uma função que faz com que o trabalho real seja um bom estilo na maioria dos casos, mas nunca deixe o estilo limitar sua compreensão do que está acontecendo por trás da cortina. | |
Se quisermos implementar argumentos customizados, que também podem ser considerados como comandos para o nosso script, precisamos listá-los em Nota:O comando O que obtemos do método padrão para | |
Nosso script suporta dois comandos não padrão, Comandos não padrão não são chamados durante a inicialização ou o desligamento. Geralmente eles são para a conveniência do administrador do sistema. Eles também podem ser usados de outros subsistemas, por exemplo, devd(8) se especificado em devd.conf(5). A lista completa de comandos disponíveis pode ser encontrada na linha de uso impressa por rc.subr(8) quando o script é invocado sem argumentos. Por exemplo, aqui está a linha de uso do script em estudo:
| |
Um script pode invocar seus próprios comandos padrão ou não padrão, se necessário. Isto pode parecer semelhante as funções de chamada, mas sabemos que comandos e funções de shell nem sempre são a mesma coisa. Por exemplo, | |
Uma função útil chamada Tenha em mente que para o sh(1) um código de saída zero significa verdadeiro e um código de saída diferente de zero significa falso. Importante:A função O uso correto de if checkyesno mumbled_enable; then foo fi Pelo contrário, chamar if checkyesno "${mumbled_enable}"; then foo fi | |
Podemos afetar os sinalizadores a serem passados para | |
Em certos casos, podemos precisar emitir uma mensagem importante que também deve ser enviada para o syslog. Isto pode ser feito facilmente com as seguintes funções rc.subr(8): | |
Os códigos de saída dos métodos e seus pré-comandos não são apenas ignorados por padrão. Se o argumento Nota:No entanto, o rc.subr(8) pode ser instruído a partir da linha de comando para ignorar esses códigos de saída e invocar todos os comandos, prefixando um argumento com |
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>.