Translation

(itstool) path: callout/screen
English
<prompt>#</prompt> <userinput>/etc/rc.d/dummy start</userinput>
Nothing started.
<prompt>#</prompt> <userinput>/etc/rc.d/dummy start Hello world!</userinput>
Greeting message: Hello world!
188/1880
Context English Portuguese (Brazil) State
<literal>shutdown</literal> <literal>shutdown</literal>
This keyword is to be listed <emphasis>explicitly</emphasis> if the service needs to be stopped before system shutdown. Esta palavra-chave deve ser listada <emphasis>explicitamente</emphasis> se o serviço precisar ser interrompido antes do desligamento do sistema.
When the system is going to shut down, <filename>/etc/rc.shutdown</filename> runs. It assumes that most <filename>rc.d</filename> scripts have nothing to do at that time. Therefore <filename>/etc/rc.shutdown</filename> selectively invokes <filename>rc.d</filename> scripts with the <literal>shutdown</literal> keyword, effectively ignoring the rest of the scripts. For even faster shutdown, <filename>/etc/rc.shutdown</filename> passes the <option>faststop</option> command to the scripts it runs so that they skip preliminary checks, e.g., the pidfile check. As dependent services should be stopped before their prerequisites, <filename>/etc/rc.shutdown</filename> runs the scripts in reverse dependency order. Quando o sistema for desligado, o <filename>/etc/rc.shutdown</filename> será executado. Ele assume que a maioria dos scripts <filename>rc.d</filename> não tem nada a fazer naquele momento. Portanto, <filename>/etc/rc.shutdown</filename> invoca seletivamente os scripts <filename>rc.d</filename> com a palavra-chave <literal>shutdown</literal>, efetivamente ignorando o restante dos scripts. Para um desligamento ainda mais rápido, o <filename>/etc/rc.shutdown</filename> passa o comando <option>faststop</option> para os scripts que executa, para que eles ignorem as verificações preliminares, por exemplo, a verificação do pidfile. Como os serviços dependentes devem ser parados antes de seus pré-requisitos, <filename>/etc/rc.shutdown</filename> executa os scripts na ordem de dependência inversa.
If writing a real <filename>rc.d</filename> script, you should consider whether it is relevant at system shutdown time. E.g., if your script does its work in response to the <option>start</option> command only, then you need not include this keyword. However, if your script manages a service, it is probably a good idea to stop it before the system proceeds to the final stage of its shutdown sequence described in <citerefentry><refentrytitle>halt</refentrytitle><manvolnum>8</manvolnum></citerefentry>. In particular, a service should be stopped explicitly if it needs considerable time or special actions to shut down cleanly. A typical example of such a service is a database engine. Se estiver escrevendo um script <filename>rc.d</filename> real, você deve considerar se é relevante no momento do desligamento do sistema. Por exemplo, se o seu script funcionar apenas em resposta ao comando <option>start</option>, não será necessário incluir essa palavra-chave. No entanto, se o seu script gerenciar um serviço, provavelmente será uma boa ideia pará-lo antes que o sistema prossiga para o estágio final de sua seqüência de desligamento descrita em <citerefentry><refentrytitle>halt</refentrytitle><manvolnum>8</manvolnum></citerefentry>. Em particular, um serviço deve ser interrompido explicitamente se precisar de tempo considerável ou ações especiais para encerrar de forma limpa. Um exemplo típico de tal serviço é um mecanismo de banco de dados.
<anchor xml:id="forcedep"/>To begin with, <function>force_depend</function> should be used with much care. It is generally better to revise the hierarchy of configuration variables for your <filename>rc.d</filename> scripts if they are interdependent. <anchor xml:id="forcedep"/> Para começar, <function>force_depend</function> deve ser usado com muito cuidado. Geralmente é melhor revisar a hierarquia de variáveis de configuração para seus scripts <filename>rc.</filename> se eles forem interdependentes.
If you still cannot do without <function>force_depend</function>, the example offers an idiom of how to invoke it conditionally. In the example, our <command>mumbled</command> daemon requires that another one, <command>frotz</command>, be started in advance. However, <command>frotz</command> is optional, too; and <citerefentry><refentrytitle>rcorder</refentrytitle><manvolnum>8</manvolnum></citerefentry> knows nothing about such details. Fortunately, our script has access to all <citerefentry><refentrytitle>rc.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> variables. If <envar>frotz_enable</envar> is true, we hope for the best and rely on <filename>rc.d</filename> to have started <command>frotz</command>. Otherwise we forcibly check the status of <command>frotz</command>. Finally, we enforce our dependency on <command>frotz</command> if it is found to be not running. A warning message will be emitted by <function>force_depend</function> because it should be invoked only if a misconfiguration has been detected. Se você ainda não pode fazer sem <function>force_depend</function>, o exemplo oferece uma expressão de como invocá-lo condicionalmente. No exemplo, nosso daemon <command>mumbled</command> requer que outro, <command>frotz</command>, seja iniciado antecipadamente. No entanto, <command>frotz</command> é opcional também; e <citerefentry><refentrytitle>rcorder</refentrytitle><manvolnum>8</manvolnum></citerefentry> não sabe nada sobre esses detalhes. Felizmente, nosso script tem acesso a todas as variáveis <citerefentry><refentrytitle>rc.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Se <envar>frotz_enable</envar> estiver como true, esperamos pelo melhor e dependemos de <filename>rc.d</filename> para iniciar <command>frotz</command>. Caso contrário, nós forçadamente verificaremos o status de <command>frotz</command>. Finalmente, impomos nossa dependência ao <command>frotz</command> se ele não estiver sendo executado. Uma mensagem de aviso será emitida por <function>force_depend</function> porque ele deve ser chamado apenas se um erro de configuração for detectado.
Giving more flexibility to an rc.d script Dando mais flexibilidade a um script rc.d
When invoked during startup or shutdown, an <filename>rc.d</filename> script is supposed to act on the entire subsystem it is responsible for. E.g., <filename>/etc/rc.d/netif</filename> should start or stop all network interfaces described by <citerefentry><refentrytitle>rc.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Either task can be uniquely indicated by a single command argument such as <option>start</option> or <option>stop</option>. Between startup and shutdown, <filename>rc.d</filename> scripts help the admin to control the running system, and it is when the need for more flexibility and precision arises. For instance, the admin may want to add the settings of a new network interface to <citerefentry><refentrytitle>rc.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> and then to start it without interfering with the operation of the existing interfaces. Next time the admin may need to shut down a single network interface. In the spirit of the command line, the respective <filename>rc.d</filename> script calls for an extra argument, the interface name. Quando chamado durante a inicialização ou desligamento, um script <filename> rc.d</filename> deve agir em todo o subsistema pelo qual é responsável. Por exemplo, <filename>/etc/rc.d/netif</filename> deve iniciar ou parar todas as interfaces de rede descritas por <citerefentry><refentrytitle>rc.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Qualquer tarefa pode ser indicada exclusivamente por um único argumento de comando, como <option>start</option> ou <option>stop</option>. Entre a inicialização e o desligamento, os scripts <filename>rc.d</filename> ajudam o administrador a controlar o sistema em execução, e é quando surge a necessidade de mais flexibilidade e precisão. Por exemplo, o administrador pode querer adicionar as configurações de uma nova interface de rede ao <citerefentry><refentrytitle>rc.conf</refentrytitle> <manvolnum>5</manvolnum></citerefentry> e então iniciá-lo sem interferir o funcionamento das interfaces existentes. Da próxima vez, o administrador pode precisar desligar uma única interface de rede. No espírito da linha de comando, o respectivo script <filename>rc.d</filename> solicita um argumento extra, o nome da interface.
Fortunately, <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> allows for passing any number of arguments to script's methods (within the system limits). Due to that, the changes in the script itself can be minimal. Felizmente, <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> permite passar qualquer número de argumentos para os métodos do script (dentro dos limites do sistema). Devido a isso, as alterações no próprio script podem ser mínimas.
How can <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> gain access to the extra command-line arguments. Should it just grab them directly? Not by any means. Firstly, an <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry> function has no access to the positional parameters of its caller, but <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> is just a sack of such functions. Secondly, the good manner of <filename>rc.d</filename> dictates that it is for the main script to decide which arguments are to be passed to its methods. Como o <citerefentry><refentrytitle>rc.subr</refentrytitle> <manvolnum>8</manvolnum></citerefentry> pode obter acesso aos argumentos de linha de comando extra. Deveria pegá-los diretamente? Não por qualquer meio. Primeiro, uma função <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry> não tem acesso aos parâmetros posicionais de seu chamador, mas o <citerefentry><refentrytitle>rc.subr</refentrytitle> <manvolnum>8</manvolnum></citerefentry> é apenas uma despedida de tais funções. Em segundo lugar, a boa maneira de <filename>rc.d</filename> determina que é para o script principal decidir quais argumentos devem ser passados para seus métodos.
So the approach adopted by <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> is as follows: <function>run_rc_command</function> passes on all its arguments but the first one to the respective method verbatim. The first, omitted, argument is the name of the method itself: <option>start</option>, <option>stop</option>, etc. It will be shifted out by <function>run_rc_command</function>, so what is <envar>$2</envar> in the original command line will be presented as <envar>$1</envar> to the method, and so on. Portanto, a abordagem adotada por <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> é a seguinte: <function>run_rc_command</function> transmite todos os seus argumentos, mas o primeiro um para o respectivo método na íntegra. O primeiro, omitido, argumento é o nome do próprio método: <option>start</option>,<option>stop</option>, etc. Ele será deslocado por <function>run_rc_command</function>, então o que é <envar>$2</envar> na linha de comando original será apresentado como <envar>$1</envar> ao método, e assim por diante.
To illustrate this opportunity, let us modify the primitive dummy script so that its messages depend on the additional arguments supplied. Here we go: Para ilustrar essa oportunidade, vamos modificar o script fictício primitivo para que suas mensagens dependam dos argumentos adicionais fornecidos. Aqui vamos nós:
#!/bin/sh

. /etc/rc.subr

name="dummy"
start_cmd="${name}_start"
stop_cmd=":"
kiss_cmd="${name}_kiss"
extra_commands="kiss"

dummy_start()
{
if [ $# -gt 0 ]; then<co xml:id="rcng-args-start"/>
echo "Greeting message: $*"
else
echo "Nothing started."
fi
}

dummy_kiss()
{
echo -n "A ghost gives you a kiss"
if [ $# -gt 0 ]; then<co xml:id="rcng-args-kiss"/>
echo -n " and whispers: $*"
fi
case "$*" in
*[.!?])
echo
;;
*)
echo .
;;
esac
}

load_rc_config $name
run_rc_command "$@"<co xml:id="rcng-args-all"/>
#!/bin/sh

. /etc/rc.subr

name="dummy"
start_cmd="${name}_start"
stop_cmd=":"
kiss_cmd="${name}_kiss"
extra_commands="kiss"

dummy_start()
{
if [ $# -gt 0 ]; then<co xml:id="rcng-args-start"/>
echo "Greeting message: $*"
else
echo "Nothing started."
fi
}

dummy_kiss()
{
echo -n "A ghost gives you a kiss"
if [ $# -gt 0 ]; then<co xml:id="rcng-args-kiss"/>
echo -n " and whispers: $*"
fi
case "$*" in
*[.!?])
echo
;;
*)
echo .
;;
esac
}

load_rc_config $name
run_rc_command "$@"<co xml:id="rcng-args-all"/>
What essential changes can we notice in the script? Quais mudanças essenciais podemos notar no script?
All arguments you type after <option>start</option> can end up as positional parameters to the respective method. We can use them in any way according to our task, skills, and fancy. In the current example, we just pass all of them to <citerefentry><refentrytitle>echo</refentrytitle><manvolnum>1</manvolnum></citerefentry> as one string in the next line — note <envar>$*</envar> within the double quotes. Here is how the script can be invoked now: Todos os argumentos digitados após <option>start</option> podem terminar como parâmetros posicionais para o respectivo método. Podemos usá-los de qualquer maneira de acordo com nossa tarefa, habilidades e fantasia. No exemplo atual, apenas passamos todos eles para <citerefentry><refentrytitle>echo</refentrytitle> <manvolnum>1</manvolnum></citerefentry> como uma cadeia na linha seguinte - note <envar>$*</envar> entre aspas duplas. Aqui está como o script pode ser chamado agora:
<prompt>#</prompt> <userinput>/etc/rc.d/dummy start</userinput>
Nothing started.
<prompt>#</prompt> <userinput>/etc/rc.d/dummy start Hello world!</userinput>
Greeting message: Hello world!
<prompt>#</prompt> <userinput>/etc/rc.d/dummy start</userinput>
Nothing started.
<prompt>#</prompt> <userinput>/etc/rc.d/dummy start Hello world!</userinput>
Greeting message: Hello world!
The same applies to any method our script provides, not only to a standard one. We have added a custom method named <option>kiss</option>, and it can take advantage of the extra arguments not less than <option>start</option> does. E.g.: O mesmo se aplica a qualquer método que nosso script forneça, não apenas a um método padrão. Nós adicionamos um método customizado chamado <option>kiss</option>, e ele pode tirar proveito dos argumentos extras da mesma forma que o <option>start</option> tira. Por exemplo:
<prompt>#</prompt> <userinput>/etc/rc.d/dummy kiss</userinput>
A ghost gives you a kiss.
<prompt>#</prompt> <userinput>/etc/rc.d/dummy kiss Once I was Etaoin Shrdlu...</userinput>
A ghost gives you a kiss and whispers: Once I was Etaoin Shrdlu...
<prompt>#</prompt> <userinput>/etc/rc.d/dummy kiss</userinput>
A ghost gives you a kiss.
<prompt>#</prompt> <userinput>/etc/rc.d/dummy kiss Once I was Etaoin Shrdlu...</userinput>
A ghost gives you a kiss and whispers: Once I was Etaoin Shrdlu...
If we want just to pass all extra arguments to any method, we can merely substitute <literal>"$@"</literal> for <literal>"$1"</literal> in the last line of our script, where we invoke <function>run_rc_command</function>. Se quisermos apenas passar todos os argumentos extras para qualquer método, podemos simplesmente substituir <literal>"$@"</literal> por <literal>"$ 1"</literal> na última linha do nosso script, onde invocamos o <function>run_rc_command</function>.
An <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry> programmer ought to understand the subtle difference between <envar>$*</envar> and <envar>$@</envar> as the ways to designate all positional parameters. For its in-depth discussion, refer to a good handbook on <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry> scripting. <emphasis>Do not</emphasis> use the expressions until you fully understand them because their misuse will result in buggy and insecure scripts. Um programador <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry> deve entender a diferença sutil entre <envar>$*</envar> e <envar>$@</envar> como as formas de designar todos os parâmetros posicionais. Para sua discussão aprofundada, consulte um bom manual sobre programação de scripts <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry>. <emphasis>Não</emphasis> use estas expressões até que você as compreenda completamente, porque o uso incorreto delas resultará em scripts inseguros e contendo bugs.
Currently <function>run_rc_command</function> may have a bug that prevents it from keeping the original boundaries between arguments. That is, arguments with embedded whitespace may not be processed correctly. The bug stems from <envar>$*</envar> misuse. Atualmente, o <function>run_rc_command</function> pode ter um bug que o impede de manter os limites originais entre os argumentos. Ou seja, argumentos com espaços em branco incorporados podem não ser processados corretamente. O bug deriva do uso inadequado de <envar>$*</envar>.
Further reading Leitura adicional
<anchor xml:id="lukem"/><link xlink:href="http://www.mewburn.net/luke/papers/rc.d.pdf">The original article by Luke Mewburn</link> offers a general overview of <filename>rc.d</filename> and detailed rationale for its design decisions. It provides insight on the whole <filename>rc.d</filename> framework and its place in a modern BSD operating system. <anchor xml:id="lukem"/><link xlink:href="http://www.mewburn.net/luke/papers/rc.d.pdf">O artigo original de Luke Mewburn</link> oferece uma visão geral do <filename>rc.d</filename> e o raciocínio detalhado que o levou a suas decisões de design. Ele fornece informações sobre toda o framework do <filename>rc.d</filename> e o seu lugar em um moderno sistema operacional BSD.
<anchor xml:id="manpages"/>The manual pages <citerefentry><refentrytitle>rc</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry>, and <citerefentry><refentrytitle>rcorder</refentrytitle><manvolnum>8</manvolnum></citerefentry> document the <filename>rc.d</filename> components in great detail. You cannot fully use the <filename>rc.d</filename> power without studying the manual pages and referring to them while writing your own scripts. <anchor xml:id="manpages"/>As páginas de manual <citerefentry><refentrytitle>rc </refentrytitle><manvolnum>8</manvolnum> </citerefentry>, <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> e <citerefentry><refentrytitle>rcorder</refentrytitle> <manvolnum>8</manvolnum></citerefentry> documentam os componentes do <filename>rc.d</filename> com grande detalhe. Você não pode usar totalmente o poder do <filename>rc.d</filename> sem estudar as páginas de manual e se referir a elas enquanto escreve seus próprios scripts.
The major source of working, real-life examples is <filename>/etc/rc.d</filename> in a live system. Its contents are easy and pleasant to read because most rough corners are hidden deep in <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry>. Keep in mind though that the <filename>/etc/rc.d</filename> scripts were not written by angels, so they might suffer from bugs and suboptimal design decisions. Now you can improve them! A sua principal fonte de inspiração são os exemplos da vida real, existentes em no <filename>/etc/rc.d</filename> de um sistema vivo. Seu conteúdo é fácil e agradável de ler, porque a maioria dos cantos ásperos estão escondidos fundo no <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry>. Tenha em mente que os scripts <filename>/etc/rc.d</filename> não foram escritos por anjos, então eles podem sofrer de bugs e decisões sub-ótimas de design. Agora você pode melhorá-los!

Loading…

New source string a year ago
Browse all component changes

Things to check

Unchanged translation

Source and translation are identical

Reset

Glossary

English Portuguese (Brazil)
Getting Started Primeiros Passos FreeBSD Doc

Source information

Source string comment
(itstool) path: callout/screen
Flags
no-wrap
Source string location
article.translate.xml:1300
String age
a year ago
Source string age
a year ago
Translation file
articles/pt_BR/rc-scripting.po, string 147