Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-doc
Path: blob/main/documentation/content/ru/articles/rc-scripting/_index.po
18096 views
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# Vladlen Popolitov <[email protected]>, 2025, 2026.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2025-11-08 16:17+0000\n"
"PO-Revision-Date: 2026-04-05 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <[email protected]>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/articlesrc-scripting_index/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.17\n"

#. type: YAML Front Matter: description
#: documentation/content/en/articles/rc-scripting/_index.adoc:1
#, no-wrap
msgid "A guide to writing new rc.d scripts and understanding those already written"
msgstr "Руководство по написанию новых rc.d-скриптов и пониманию уже существующих"

#. type: Title =
#: documentation/content/en/articles/rc-scripting/_index.adoc:1
#: documentation/content/en/articles/rc-scripting/_index.adoc:12
#, no-wrap
msgid "Practical rc.d scripting in BSD"
msgstr "Практическое руководство по написанию rc.d скриптов в BSD"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:45
msgid "Abstract"
msgstr "Аннотация"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:49
msgid ""
"Beginners may find it difficult to relate the facts from the formal "
"documentation on the BSD [.filename]#rc.d# framework with the practical "
"tasks of [.filename]#rc.d# scripting.  In this article, we consider a few "
"typical cases of increasing complexity, show [.filename]#rc.d# features "
"suited for each case, and discuss how they work.  Such an examination should "
"provide reference points for further study of the design and efficient "
"application of [.filename]#rc.d#."
msgstr ""
"Новичкам может быть сложно соотнести факты из официальной документации по "
"фреймворку [.filename]#rc.d# в BSD с практическими задачами написания "
"скриптов для [.filename]#rc.d#. В этой статье мы рассмотрим несколько "
"типичных случаев возрастающей сложности, покажем возможности [.filename]#rc."
"d#, подходящие для каждого случая, и обсудим, как они работают. Такое "
"рассмотрение должно дать ориентиры для дальнейшего изучения устройства и "
"эффективного применения [.filename]#rc.d#."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:51
msgid "'''"
msgstr "'''"

#. type: Title ==
#: documentation/content/en/articles/rc-scripting/_index.adoc:55
#, no-wrap
msgid "Introduction"
msgstr "Введение"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:61
msgid ""
"The historical BSD had a monolithic startup script, [.filename]#/etc/rc#.  "
"It was invoked by man:init[8] at system boot time and performed all userland "
"tasks required for multi-user operation: checking and mounting file systems, "
"setting up the network, starting daemons, and so on.  The precise list of "
"tasks was not the same in every system; admins needed to customize it.  With "
"few exceptions, [.filename]#/etc/rc# had to be modified, and true hackers "
"liked it."
msgstr ""
"Исторически в BSD был монолитный стартовый сценарий [.filename]#/etc/rc#. Он "
"вызывался man:init[8] во время загрузки системы и выполнял все задачи "
"пользовательского пространства, необходимые для многопользовательского "
"режима: проверку и монтирование файловых систем, настройку сети, запуск "
"демонов и так далее. Точный список задач не был одинаковым в каждой системе; "
"администраторам требовалось его настраивать. За редкими исключениями, [."
"filename]#/etc/rc# приходилось изменять, и настоящим хакерам это нравилось."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:67
msgid ""
"The real problem with the monolithic approach was that it provided no "
"control over the individual components started from [.filename]#/etc/rc#.  "
"For instance, [.filename]#/etc/rc# could not restart a single daemon.  The "
"system admin had to find the daemon process by hand, kill it, wait until it "
"actually exited, then browse through [.filename]#/etc/rc# for the flags, and "
"finally type the full command line to start the daemon again.  The task "
"would become even more difficult and prone to errors if the service to "
"restart consisted of more than one daemon or demanded additional actions.  "
"In a few words, the single script failed to fulfil what scripts are for: to "
"make the system admin's life easier."
msgstr ""
"Основная проблема монолитного подхода заключалась в том, что он не "
"предоставлял контроля над отдельными компонентами, запускаемыми из [."
"filename]#/etc/rc#. Например, [.filename]#/etc/rc# не мог перезапустить "
"отдельный демон. Администратору системы приходилось вручную находить процесс "
"демона, завершать его, ждать, пока он действительно завершится, затем искать "
"в [.filename]#/etc/rc# нужные флаги и, наконец, вводить полную командную "
"строку для повторного запуска демона. Задача становилась ещё сложнее и более "
"подверженной ошибкам, если служба состояла из нескольких демонов или "
"требовала дополнительных действий. Одним словом, единый скрипт не справлялся "
"с тем, для чего скрипты вообще предназначены: облегчать жизнь администратору "
"системы."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:74
msgid ""
"Later there was an attempt to split out some parts of [.filename]#/etc/rc# "
"for the sake of starting the most important subsystems separately.  The "
"notorious example was [.filename]#/etc/netstart# to bring up networking.  It "
"did allow for accessing the network from single-user mode, but it did not "
"integrate well into the automatic startup process because parts of its code "
"needed to interleave with actions essentially unrelated to networking.  That "
"was why [.filename]#/etc/netstart# mutated into [.filename]#/etc/rc."
"network#.  The latter was no longer an ordinary script; it comprised of "
"large, tangled man:sh[1] functions called from [.filename]#/etc/rc# at "
"different stages of system startup.  However, as the startup tasks grew "
"diverse and sophisticated, the \"quasi-modular\" approach became even more "
"of a drag than the monolithic [.filename]#/etc/rc# had been."
msgstr ""
"Позже была предпринята попытка разделить некоторые части [.filename]#/etc/"
"rc# для возможности отдельного запуска наиболее важных подсистем. Известным "
"примером стал [.filename]#/etc/netstart#, предназначенный для настройки "
"сети. Это позволяло получить доступ к сети в однопользовательском режиме, но "
"плохо интегрировалось в автоматический процесс запуска, так как части его "
"кода требовалось переплетаться с действиями, по сути не связанными с сетью. "
"Именно поэтому [.filename]#/etc/netstart# превратился в [.filename]#/etc/rc."
"network#. Последний больше не был обычным скриптом; он состоял из больших, "
"запутанных функций man:sh[1], вызываемых из [.filename]#/etc/rc# на разных "
"этапах загрузки системы. Однако по мере того, как задачи при запуске "
"становились разнообразнее и сложнее, \"квазимодульный\" подход стал ещё "
"большей обузой, чем монолитный [.filename]#/etc/rc#."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:82
msgid ""
"Without a clean and well-designed framework, the startup scripts had to bend "
"over backwards to satisfy the needs of rapidly developing BSD-based "
"operating systems.  It became obvious at last that more steps are necessary "
"on the way to a fine-grained and extensible [.filename]#rc# system.  Thus "
"BSD [.filename]#rc.d# was born.  Its acknowledged fathers were Luke Mewburn "
"and the NetBSD community.  Later it was imported into FreeBSD.  Its name "
"refers to the location of system scripts for individual services, which is "
"in [.filename]#/etc/rc.d#.  Soon we will learn about more components of the "
"[.filename]#rc.d# system and see how the individual scripts are invoked."
msgstr ""
"Без чистого и хорошо продуманного каркаса, стартовые скрипты вынуждены были "
"идти на всевозможные ухищрения, чтобы удовлетворить потребности быстро "
"развивающихся BSD-ориентированных операционных систем. В конце концов стало "
"очевидно, что необходимы дополнительные шаги на пути к детализированной и "
"расширяемой системе [.filename]#rc#. Так появилась BSD [.filename]#rc.d#. Её "
"признанными создателями стали Люк Мьюберн и сообщество NetBSD. Позже она "
"была импортирована в FreeBSD. Её название отсылает к расположению системных "
"скриптов для отдельных служб, которое находится в [.filename]#/etc/rc.d#. "
"Вскоре мы узнаем больше о компонентах системы [.filename]#rc.d# и увидим, "
"как вызываются отдельные скрипты."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:93
msgid ""
"The basic ideas behind BSD [.filename]#rc.d# are _fine modularity_ and "
"__code reuse__.  _Fine modularity_ means that each basic \"service\" such as "
"a system daemon or primitive startup task gets its own man:sh[1] script able "
"to start the service, stop it, reload it, check its status.  A particular "
"action is chosen by the command-line argument to the script.  The [."
"filename]#/etc/rc# script still drives system startup, but now it merely "
"invokes the smaller scripts one by one with the `start` argument.  It is "
"easy to perform shutdown tasks as well by running the same set of scripts "
"with the `stop` argument, which is done by [.filename]#/etc/rc.shutdown#.  "
"Note how closely this follows the Unix way of having a set of small "
"specialized tools, each fulfilling its task as well as possible.  _Code "
"reuse_ means that common operations are implemented as man:sh[1] functions "
"and collected in [.filename]#/etc/rc.subr#.  Now a typical script can be "
"just a few lines' worth of man:sh[1] code.  Finally, an important part of "
"the [.filename]#rc.d# framework is man:rcorder[8], which helps [.filename]#/"
"etc/rc# to run the small scripts orderly with respect to dependencies "
"between them.  It can help [.filename]#/etc/rc.shutdown#, too, because the "
"proper order for the shutdown sequence is opposite to that of startup."
msgstr ""
"Основные идеи, лежащие в основе BSD [.filename]#rc.d#, — это _тонкая "
"модульность_ и __повторное использование кода__. _Тонкая модульность_ "
"означает, что каждая базовая «служба», такая как системный демон или "
"примитивная задача запуска, получает собственный сценарий man:sh[1], "
"способный запустить службу, остановить её, перезагрузить или проверить её "
"состояние. Конкретное действие выбирается аргументом командной строки, "
"переданным в сценарий. Сценарий [.filename]#/etc/rc# по-прежнему управляет "
"запуском системы, но теперь он просто вызывает небольшие сценарии один за "
"другим с аргументом `start`. Также легко выполнять задачи завершения работы, "
"запуская тот же набор сценариев с аргументом `stop`, что и делает [."
"filename]#/etc/rc.shutdown#. Обратите внимание, насколько это близко следует "
"Unix-подходу, где используется набор небольших специализированных "
"инструментов, каждый из которых выполняет свою задачу наилучшим образом. "
"_Повторное использование кода_ означает, что общие операции реализованы как "
"функции man:sh[1] и собраны в [.filename]#/etc/rc.subr#. Теперь типичный "
"сценарий может состоять всего из нескольких строк кода man:sh[1]. Наконец, "
"важной частью инфраструктуры [.filename]#rc.d# является man:rcorder[8], "
"который помогает [.filename]#/etc/rc# упорядоченно запускать небольшие "
"сценарии с учётом зависимостей между ними. Он также может помочь [."
"filename]#/etc/rc.shutdown#, поскольку правильный порядок завершения работы "
"противоположен порядку запуска."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:101
msgid ""
"The BSD [.filename]#rc.d# design is described in crossref:rc-"
"scripting[lukem, the original article by Luke Mewburn], and the [."
"filename]#rc.d# components are documented in great detail in crossref:rc-"
"scripting[manpages, the respective manual pages].  However, it might not "
"appear obvious to an [.filename]#rc.d# newbie how to tie the numerous bits "
"and pieces together to create a well-styled script for a particular task.  "
"Therefore this article will try a different approach to describe [."
"filename]#rc.d#.  It will show which features should be used in a number of "
"typical cases, and why.  Note that this is not a how-to document because our "
"aim is not at giving ready-made recipes, but at showing a few easy entrances "
"into the [.filename]#rc.d# realm.  Neither is this article a replacement for "
"the relevant manual pages.  Do not hesitate to refer to them for more formal "
"and complete documentation while reading this article."
msgstr ""
"Дизайн BSD [.filename]#rc.d# описан в crossref:rc-scripting[lukem, "
"оригинальной статье Люка Мьюберна], а компоненты [.filename]#rc.d# подробно "
"документированы в crossref:rc-scripting[manpages, соответствующих страницах "
"Справочника]. Однако новичку в [.filename]#rc.d# может быть неочевидно, как "
"связать многочисленные элементы вместе, чтобы создать хорошо "
"структурированный скрипт для конкретной задачи. Поэтому в этой статье будет "
"предпринята попытка описать [.filename]#rc.d# с другого ракурса. В ней будет "
"показано, какие функции следует использовать в ряде типичных случаев и "
"почему. Обратите внимание, что это не руководство HowTo, поскольку наша цель "
"— не предоставление готовых рецептов, а демонстрация нескольких простых "
"способов входа в мир [.filename]#rc.d#. Также эта статья не заменяет "
"соответствующие страницы Справочника. Не стесняйтесь обращаться к ним для "
"получения более формальной и полной документации во время чтения этой статьи."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:105
msgid ""
"There are prerequisites to understanding this article.  First of all, you "
"should be familiar with the man:sh[1] scripting language to master [."
"filename]#rc.d#.  In addition, you should know how the system performs "
"userland startup and shutdown tasks, which is described in man:rc[8]."
msgstr ""
"Для понимания этой статьи есть предварительные требования. Прежде всего, вы "
"должны быть знакомы с языком написания сценариев man:sh[1], чтобы освоить [."
"filename]#rc.d#. Кроме того, вы должны знать, как система выполняет задачи "
"запуска и завершения работы пользовательского пространства, что описано в "
"man:rc[8]."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:108
msgid ""
"This article focuses on the FreeBSD branch of [.filename]#rc.d#.  "
"Nevertheless, it may be useful to NetBSD developers, too, because the two "
"branches of BSD [.filename]#rc.d# not only share the same design but also "
"stay similar in their aspects visible to script authors."
msgstr ""
"Эта статья посвящена ветке FreeBSD в [.filename]#rc.d#. Тем не менее, она "
"может быть полезна и разработчикам NetBSD, потому что две ветки BSD [."
"filename]#rc.d# не только разделяют одинаковый дизайн, но и остаются схожими "
"в аспектах, видимых авторам скриптов."

#. type: Title ==
#: documentation/content/en/articles/rc-scripting/_index.adoc:110
#, no-wrap
msgid "Outlining the task"
msgstr "Обрисовка задачи"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:114
msgid ""
"A little consideration before starting `$EDITOR` will not hurt.  To write a "
"well-tempered [.filename]#rc.d# script for a system service, we should be "
"able to answer the following questions first:"
msgstr ""
"Немного размышлений перед запуском `$EDITOR` не повредит. Чтобы написать "
"хорошо продуманный скрипт [.filename]#rc.d# для системной службы, сначала "
"нужно ответить на следующие вопросы:"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:116
msgid "Is the service mandatory or optional?"
msgstr "Является ли служба обязательной или опциональной?"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:117
msgid ""
"Will the script serve a single program, e.g., a daemon, or perform more "
"complex actions?"
msgstr ""
"Будет ли скрипт обслуживать одну программу, например, демон, или выполнять "
"более сложные действия?"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:118
msgid "Which other services will our service depend on, and vice versa?"
msgstr "От каких других служб зависит наша служба, и наоборот?"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:120
msgid ""
"From the examples that follow we will see why it is important to know the "
"answers to these questions."
msgstr ""
"Из следующих примеров мы увидим, почему важно знать ответы на эти вопросы."

#. type: Title ==
#: documentation/content/en/articles/rc-scripting/_index.adoc:122
#, no-wrap
msgid "A dummy script"
msgstr "Примитивный скрипт"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:125
msgid ""
"The following script just emits a message each time the system boots up:"
msgstr ""
"Следующий скрипт просто выводит сообщение каждый раз при загрузке системы:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:129
#, no-wrap
msgid "#!/bin/sh <.>\n"
msgstr "#!/bin/sh <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:131
#, no-wrap
msgid ". /etc/rc.subr <.>\n"
msgstr ". /etc/rc.subr <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:135
#, no-wrap
msgid ""
"name=\"dummy\" <.>\n"
"start_cmd=\"${name}_start\" <.>\n"
"stop_cmd=\":\" <.>\n"
msgstr ""
"name=\"dummy\" <.>\n"
"start_cmd=\"${name}_start\" <.>\n"
"stop_cmd=\":\" <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:140
#, no-wrap
msgid ""
"dummy_start() <.>\n"
"{\n"
"\techo \"Nothing started.\"\n"
"}\n"
msgstr ""
"dummy_start() <.>\n"
"{\n"
"\techo \"Nothing started.\"\n"
"}\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:143
#, no-wrap
msgid ""
"load_rc_config $name <.>\n"
"run_rc_command \"$1\" <.>\n"
msgstr ""
"load_rc_config $name <.>\n"
"run_rc_command \"$1\" <.>\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:146
msgid "Things to note are:"
msgstr "Вот что следует учитывать:"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:152
msgid ""
"&#10122; An interpreted script should begin with the magic \"shebang\" "
"line.  That line specifies the interpreter program for the script.  Due to "
"the shebang line, the script can be invoked exactly like a binary program "
"provided that it has the execute bit set.  (See man:chmod[1].)  For example, "
"a system admin can run our script manually, from the command line:"
msgstr ""
"&#10122; Интерпретируемый скрипт должен начинаться с \"волшебной\" строки "
"shebang. Эта строка указывает программу-интерпретатор для скрипта. Благодаря "
"строке shebang скрипт может быть запущен точно так же, как бинарная "
"программа, при условии что у него установлен бит выполнения. (См. man:"
"chmod[1].) Например, системный администратор может запустить наш скрипт "
"вручную из командной строки:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:156
#, no-wrap
msgid "# /etc/rc.d/dummy start\n"
msgstr "# /etc/rc.d/dummy start\n"

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:162
msgid ""
"To be properly managed by the [.filename]#rc.d# framework, its scripts need "
"to be written in the man:sh[1] language.  If you have a service or port that "
"uses a binary control utility or a startup routine written in another "
"language, install that element in [.filename]#/usr/sbin# (for the system) or "
"[.filename]#/usr/local/sbin# (for ports) and call it from a man:sh[1] script "
"in the appropriate [.filename]#rc.d# directory."
msgstr ""
"Для корректного управления в рамках [.filename]#rc.d# скрипты должны быть "
"написаны на языке man:sh[1]. Если у вас есть служба или порт, который "
"использует двоичную утилиту управления или процедуру запуска, написанную на "
"другом языке, установите этот компонент в [.filename]#/usr/sbin# (для "
"системы) или [.filename]#/usr/local/sbin# (для портов) и вызовите его из man:"
"sh[1] скрипта в соответствующем каталоге [.filename]#rc.d#."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:167
msgid ""
"If you would like to learn the details of why [.filename]#rc.d# scripts must "
"be written in the man:sh[1] language, see how [.filename]#/etc/rc# invokes "
"them by means of `run_rc_script`, then study the implementation of "
"`run_rc_script` in [.filename]#/etc/rc.subr#."
msgstr ""
"Если вы хотите узнать подробности о том, почему скрипты [.filename]#rc.d# "
"должны быть написаны на языке man:sh[1], изучите, как [.filename]#/etc/rc# "
"вызывает их с помощью `run_rc_script`, а затем изучите реализацию "
"`run_rc_script` в [.filename]#/etc/rc.subr#."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:173
msgid ""
"&#10123; In [.filename]#/etc/rc.subr#, a number of man:sh[1] functions are "
"defined for an [.filename]#rc.d# script to use.  The functions are "
"documented in man:rc.subr[8].  While it is theoretically possible to write "
"an [.filename]#rc.d# script without ever using man:rc.subr[8], its functions "
"prove extremely handy and make the job an order of magnitude easier. So it "
"is no surprise that everybody resorts to man:rc.subr[8] in [.filename]#rc.d# "
"scripts.  We are not going to be an exception."
msgstr ""
"&#10123; В файле [.filename]#/etc/rc.subr# определено несколько функций man:"
"sh[1], которые могут использоваться скриптами [.filename]#rc.d#. Эти функции "
"описаны в man:rc.subr[8]. Хотя теоретически возможно написать скрипт [."
"filename]#rc.d# без использования man:rc.subr[8], его функции оказываются "
"чрезвычайно полезными и значительно упрощают задачу. Поэтому неудивительно, "
"что все используют man:rc.subr[8] в скриптах [.filename]#rc.d#. Мы не будем "
"исключением."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:176
msgid ""
"An [.filename]#rc.d# script must \"source\"[.filename]#/etc/rc.subr# "
"(include it using \"`.`\") _before_ it calls man:rc.subr[8] functions so "
"that man:sh[1] has an opportunity to learn the functions.  The preferred "
"style is to source [.filename]#/etc/rc.subr# first of all."
msgstr ""
"Файл [.filename]#rc.d# должен \"подгрузить\" ([.filename]#/etc/rc.subr#, "
"включить его с помощью \"`.`\") _до_ вызова функций man:rc.subr[8], чтобы у "
"man:sh[1] была возможность знать об этих функциях заранее. Предпочтительный "
"стиль — подгружать [.filename]#/etc/rc.subr# в самом начале."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:180
msgid ""
"Some useful functions related to networking are provided by another include "
"file, [.filename]#/etc/network.subr#."
msgstr ""
"Некоторые полезные функции, связанные с сетью, предоставляются другим "
"включаемым файлом — [.filename]#/etc/network.subr#."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:185
msgid ""
"&#10124; [[name-var]]The mandatory variable `name` specifies the name of our "
"script.  It is required by man:rc.subr[8].  That is, each [.filename]#rc.d# "
"script _must_ set `name` before it calls man:rc.subr[8] functions."
msgstr ""
"&#10124; [[name-var]]Обязательная переменная `name` определяет имя нашего "
"скрипта. Она требуется man:rc.subr[8]. То есть, каждый скрипт в [."
"filename]#rc.d# _должен_ установить `name` перед вызовом функций man:rc."
"subr[8]."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:191
msgid ""
"Now it is the right time to choose a unique name for our script once and for "
"all.  We will use it in a number of places while developing the script.  The "
"content of the name variable needs to match the script name, some parts of "
"FreeBSD (e.g., crossref:rc-scripting[rcng-service-jails, service jails] and "
"the cpuset feature of the rc framework) depend upon this.  As such the "
"filename shall also not contain characters which may be troublesome in "
"scripting (e.g., do not use a hyphen \"-\" and others)."
msgstr ""
"Теперь самое время раз и навсегда выбрать уникальное имя для нашего скрипта. "
"Мы будем использовать его в нескольких местах при разработке скрипта. "
"Содержимое переменной name должно соответствовать имени скрипта, так как "
"некоторые части FreeBSD (например, crossref:rc-scripting[rcng-service-jails, "
"сервисные клетки (jail)] и функция cpuset в rc framework) зависят от этого. "
"Таким образом, имя файла также не должно содержать символов, которые могут "
"вызвать проблемы в скриптах (например, не используйте дефис \"-\" и другие)."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:198
msgid ""
"The current style of [.filename]#rc.d# scripting is to enclose values "
"assigned to variables in double quotes.  Keep in mind that it is just a "
"style issue that may not always be applicable.  You can safely omit quotes "
"from around simple words without man:sh[1] metacharacters in them, while in "
"certain cases you will need single quotes to prevent any interpretation of "
"the value by man:sh[1].  A programmer should be able to tell the language "
"syntax from style conventions and use both of them wisely."
msgstr ""
"Текущий стиль написания скриптов в [.filename]#rc.d# заключается в "
"заключении значений, присваиваемых переменным, в двойные кавычки. Имейте в "
"виду, что это всего лишь вопрос стиля, который может быть не всегда "
"применим. Вы можете безопасно опустить кавычки вокруг простых слов без "
"метасимволов man:sh[1], тогда как в некоторых случаях вам понадобятся "
"одинарные кавычки, чтобы предотвратить интерпретацию значения man:sh[1]. "
"Программист должен уметь отличать синтаксис языка от стилевых соглашений и "
"разумно использовать и то, и другое."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:204
msgid ""
"&#10125; The main idea behind man:rc.subr[8] is that an [.filename]#rc.d# "
"script provides handlers, or methods, for man:rc.subr[8] to invoke.  In "
"particular, `start`, `stop`, and other arguments to an [.filename]#rc.d# "
"script are handled this way.  A method is a man:sh[1] expression stored in a "
"variable named `argument_cmd`, where _argument_ corresponds to what can be "
"specified on the script's command line.  We will see later how man:rc."
"subr[8] provides default methods for the standard arguments."
msgstr ""
"&#10125; Основная идея man:rc.subr[8] заключается в том, что скрипт [."
"filename]#rc.d# предоставляет обработчики (или методы) для вызова man:rc."
"subr[8]. В частности, аргументы `start`, `stop` и другие, передаваемые в "
"скрипт [.filename]#rc.d#, обрабатываются таким образом. Метод представляет "
"собой выражение man:sh[1], сохранённое в переменной с именем `argument_cmd`, "
"где _argument_ соответствует тому, что может быть указано в командной строке "
"скрипта. Далее мы увидим, как man:rc.subr[8] предоставляет стандартные "
"методы для типовых аргументов."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:209
msgid ""
"To make the code in [.filename]#rc.d# more uniform, it is common to use `"
"${name}` wherever appropriate.  Thus a number of lines can be just copied "
"from one script to another."
msgstr ""
"Чтобы сделать код в [.filename]#rc.d# более единообразным, обычно используют "
"`${name}` везде, где это уместно. Таким образом, множество строк можно "
"просто копировать из одного скрипта в другой."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:213
msgid ""
"&#10126; We should keep in mind that man:rc.subr[8] provides default methods "
"for the standard arguments.  Consequently, we must override a standard "
"method with a no-op man:sh[1] expression if we want it to do nothing."
msgstr ""
"&#10126; Следует помнить, что man:rc.subr[8] предоставляет методы по "
"умолчанию для стандартных аргументов. Следовательно, если мы хотим, чтобы "
"стандартный метод ничего не делал, мы должны переопределить его с помощью no-"
"op man:sh[1] выражения."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:216
msgid ""
"&#10127; The body of a sophisticated method can be implemented as a "
"function.  It is a good idea to make the function name meaningful."
msgstr ""
"&#10127; Тело сложного метода может быть реализовано в виде функции. Хорошей "
"практикой является использование осмысленного имени функции."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:220
msgid ""
"It is strongly recommended to add the prefix `${name}` to the names of all "
"functions defined in our script so they never clash with the functions from "
"man:rc.subr[8] or another common include file."
msgstr ""
"Настоятельно рекомендуется добавлять префикс `${name}` к именам всех "
"функций, определённых в нашем скрипте, чтобы они никогда не конфликтовали с "
"функциями из man:rc.subr[8] или другого общего включаемого файла."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:224
msgid ""
"&#10128; This call to man:rc.subr[8] loads man:rc.conf[5] variables.  Our "
"script makes no use of them yet, but it still is recommended to load man:rc."
"conf[5] because there can be man:rc.conf[5] variables controlling man:rc."
"subr[8] itself."
msgstr ""
"&#10128; Этот вызов man:rc.subr[8] загружает переменные man:rc.conf[5]. Наш "
"скрипт пока их не использует, но всё равно рекомендуется загружать man:rc."
"conf[5], потому что могут быть переменные man:rc.conf[5], управляющие самим "
"man:rc.subr[8]."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:227
msgid ""
"&#10129; Usually this is the last command in an [.filename]#rc.d# script.  "
"It invokes the man:rc.subr[8] machinery to perform the requested action "
"using the variables and methods our script has provided."
msgstr ""
"&#10129; Обычно это последняя команда в скрипте [.filename]#rc.d#. Она "
"вызывает механизм man:rc.subr[8] для выполнения запрошенного действия, "
"используя переменные и методы, предоставленные нашим скриптом."

#. type: Title ==
#: documentation/content/en/articles/rc-scripting/_index.adoc:229
#, no-wrap
msgid "A configurable dummy script"
msgstr "Настраиваемый фиктивный скрипт"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:239
msgid ""
"Now let us add some controls to our dummy script.  As you may know, [."
"filename]#rc.d# scripts are controlled with man:rc.conf[5].  Fortunately, "
"man:rc.subr[8] hides all the complications from us.  The following script "
"uses man:rc.conf[5] via man:rc.subr[8] to see whether it is enabled in the "
"first place, and to fetch a message to show at boot time.  These two tasks "
"in fact are independent.  On the one hand, an [.filename]#rc.d# script can "
"just support enabling and disabling its service.  On the other hand, a "
"mandatory [.filename]#rc.d# script can have configuration variables.  We "
"will do both things in the same script though:"
msgstr ""
"Теперь добавим некоторые элементы управления в наш тестовый скрипт. Как вам "
"может быть известно, скрипты [.filename]#rc.d# управляются с помощью man:rc."
"conf[5]. К счастью, man:rc.subr[8] скрывает от нас все сложности. Следующий "
"скрипт использует man:rc.conf[5] через man:rc.subr[8], чтобы проверить, "
"включен ли он вообще, и получить сообщение для отображения во время "
"загрузки. Эти две задачи на самом деле независимы. С одной стороны, скрипт [."
"filename]#rc.d# может просто поддерживать включение и выключение своего "
"сервиса. С другой стороны, обязательный скрипт [.filename]#rc.d# может иметь "
"переменные конфигурации. Однако мы реализуем обе возможности в одном скрипте:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:243
#: documentation/content/en/articles/rc-scripting/_index.adoc:334
#: documentation/content/en/articles/rc-scripting/_index.adoc:392
#: documentation/content/en/articles/rc-scripting/_index.adoc:624
#: documentation/content/en/articles/rc-scripting/_index.adoc:755
#: documentation/content/en/articles/rc-scripting/_index.adoc:860
#: documentation/content/en/articles/rc-scripting/_index.adoc:893
#: documentation/content/en/articles/rc-scripting/_index.adoc:927
#, no-wrap
msgid "#!/bin/sh\n"
msgstr "#!/bin/sh\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:245
#: documentation/content/en/articles/rc-scripting/_index.adoc:336
#: documentation/content/en/articles/rc-scripting/_index.adoc:394
#: documentation/content/en/articles/rc-scripting/_index.adoc:631
#: documentation/content/en/articles/rc-scripting/_index.adoc:757
#: documentation/content/en/articles/rc-scripting/_index.adoc:862
#: documentation/content/en/articles/rc-scripting/_index.adoc:895
#: documentation/content/en/articles/rc-scripting/_index.adoc:943
#, no-wrap
msgid ". /etc/rc.subr\n"
msgstr ". /etc/rc.subr\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:248
#, no-wrap
msgid ""
"name=dummy\n"
"rcvar=dummy_enable <.>\n"
msgstr ""
"name=dummy\n"
"rcvar=dummy_enable <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:251
#, no-wrap
msgid ""
"start_cmd=\"${name}_start\"\n"
"stop_cmd=\":\"\n"
msgstr ""
"start_cmd=\"${name}_start\"\n"
"stop_cmd=\":\"\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:255
#, no-wrap
msgid ""
"load_rc_config $name <.>\n"
": ${dummy_enable:=no} <.>\n"
": ${dummy_msg=\"Nothing started.\"} <.>\n"
msgstr ""
"load_rc_config $name <.>\n"
": ${dummy_enable:=no} <.>\n"
": ${dummy_msg=\"Nothing started.\"} <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:260
#, no-wrap
msgid ""
"dummy_start()\n"
"{\n"
"\techo \"$dummy_msg\" <.>\n"
"}\n"
msgstr ""
"dummy_start()\n"
"{\n"
"\techo \"$dummy_msg\" <.>\n"
"}\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:262
#: documentation/content/en/articles/rc-scripting/_index.adoc:972
#, no-wrap
msgid "run_rc_command \"$1\"\n"
msgstr "run_rc_command \"$1\"\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:265
msgid "What changed in this example?"
msgstr "Что изменилось в этом примере?"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:267
msgid ""
"&#10122; The variable `rcvar` specifies the name of the ON/OFF knob variable."
msgstr ""
"&#10122; Переменная `rcvar` определяет имя переменной-переключателя ON/OFF."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:269
msgid ""
"&#10123; Now `load_rc_config` is invoked earlier in the script, before any "
"man:rc.conf[5] variables are accessed."
msgstr ""
"&#10123; Теперь `load_rc_config` вызывается раньше в скрипте, до обращения к "
"любым переменным man:rc.conf[5]."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:275
msgid ""
"While examining [.filename]#rc.d# scripts, keep in mind that man:sh[1] "
"defers the evaluation of expressions in a function until the latter is "
"called.  Therefore it is not an error to invoke `load_rc_config` as late as "
"just before `run_rc_command` and still access man:rc.conf[5] variables from "
"the method functions exported to `run_rc_command`.  This is because the "
"method functions are to be called by `run_rc_command`, which is invoked "
"_after_ `load_rc_config`."
msgstr ""
"При изучении скриптов в [.filename]#rc.d# следует помнить, что man:sh[1] "
"откладывает вычисление выражений в функции до её вызова. Поэтому не будет "
"ошибкой вызвать `load_rc_config` непосредственно перед `run_rc_command` и "
"при этом обращаться к переменным man:rc.conf[5] из функций методов, "
"экспортируемых в `run_rc_command`. Это связано с тем, что функции методов "
"вызываются `run_rc_command`, который выполняется _после_ `load_rc_config`."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:281
msgid ""
"&#10124; A warning will be emitted by `run_rc_command` if `rcvar` itself is "
"set, but the indicated knob variable is unset.  If your [.filename]#rc.d# "
"script is for the base system, you should add a default setting for the knob "
"to [.filename]#/etc/defaults/rc.conf# and document it in man:rc.conf[5].  "
"Otherwise it is your script that should provide a default setting for the "
"knob.  The canonical approach to the latter case is shown in the example."
msgstr ""
"&#10124; `run_rc_command` выдаст предупреждение, если переменная `rcvar` "
"установлена, но указанная переменная-флаг не задана. Если ваш скрипт [."
"filename]#rc.d# предназначен для базовой системы, вы должны добавить "
"значение по умолчанию для флага в [.filename]#/etc/defaults/rc.conf# и "
"задокументировать его в man:rc.conf[5]. В противном случае ваш скрипт должен "
"предоставить значение по умолчанию для флага. Канонический подход для "
"последнего случая показан в примере."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:288
msgid ""
"You can make man:rc.subr[8] act as though the knob is set to `ON`, "
"irrespective of its current setting, by prefixing the argument to the script "
"with `one` or `force`, as in `onestart` or `forcestop`.  Keep in mind though "
"that `force` has other dangerous effects we will touch upon below, while "
"`one` just overrides the ON/OFF knob.  E.g., assume that `dummy_enable` is "
"`OFF`.  The following command will run the `start` method in spite of the "
"setting:"
msgstr ""
"Вы можете заставить man:rc.subr[8] действовать так, как если бы "
"переключатель установлен в `ON`, независимо от его текущего значения, "
"добавив перед аргументом скрипта префикс `one` или `force`, например "
"`onestart` или `forcestop`. Однако учтите, что `force` имеет другие опасные "
"эффекты, которые мы затронем ниже, тогда как `one` просто переопределяет "
"переключатель ON/OFF. Например, предположим, что `dummy_enable` установлен в "
"`OFF`. Следующая команда выполнит метод `start`, несмотря на настройку:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:292
#, no-wrap
msgid "# /etc/rc.d/dummy onestart\n"
msgstr "# /etc/rc.d/dummy onestart\n"

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:299
msgid ""
"&#10125; Now the message to be shown at boot time is no longer hard-coded in "
"the script.  It is specified by an man:rc.conf[5] variable named "
"`dummy_msg`.  This is a trivial example of how man:rc.conf[5] variables can "
"control an [.filename]#rc.d# script."
msgstr ""
"&#10125; Теперь сообщение, отображаемое при загрузке, больше не жёстко "
"закодировано в скрипте. Оно задается переменной `dummy_msg` в man:rc.conf[5]"
". Это простой пример того, как переменные man:rc.conf[5] могут управлять "
"скриптом в [.filename]#rc.d#."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:304
msgid ""
"The names of all man:rc.conf[5] variables used exclusively by our script "
"_must_ have the same prefix: `${name}_`.  For example: `dummy_mode`, "
"`dummy_state_file`, and so on."
msgstr ""
"Имена всех переменных man:rc.conf[5], используемых исключительно нашим "
"скриптом, _должны_ иметь один и тот же префикс: `${name}_`. Например: "
"`dummy_mode`, `dummy_state_file` и так далее."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:309
msgid ""
"While it is possible to use a shorter name internally, e.g., just `msg`, "
"adding the unique prefix `${name}_` to all global names introduced by our "
"script will save us from possible collisions with the man:rc.subr[8] "
"namespace."
msgstr ""
"Хотя можно использовать более короткое имя внутри, например, просто `msg`, "
"добавление уникального префикса `${name}_` ко всем глобальным именам, "
"вводимым нашим скриптом, избавит нас от возможных конфликтов с пространством "
"имён man:rc.subr[8]."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:312
msgid ""
"As a rule, [.filename]#rc.d# scripts of the base system need not provide "
"defaults for their man:rc.conf[5] variables because the defaults should be "
"set in [.filename]#/etc/defaults/rc.conf# instead.  On the other hand, [."
"filename]#rc.d# scripts for ports should provide the defaults as shown in "
"the example."
msgstr ""
"Как правило, скрипты [.filename]#rc.d# базовой системы не должны "
"предоставлять значения по умолчанию для своих переменных man:rc.conf[5], "
"поскольку значения по умолчанию должны быть установлены в [.filename]#/etc/"
"defaults/rc.conf#. С другой стороны, скрипты [.filename]#rc.d# для портов "
"должны предоставлять значения по умолчанию, как показано в примере."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:316
msgid ""
"&#10126; Here we use `dummy_msg` to actually control our script, i.e., to "
"emit a variable message.  Use of a shell function is overkill here, since it "
"only runs a single command; an equally valid alternative is:"
msgstr ""
"&#10126; Здесь мы используем `dummy_msg` для фактического управления нашим "
"скриптом, т.е., для выдачи переменного сообщения. Использование shell-"
"функции здесь избыточно, так как она выполняет только одну команду; "
"равнозначной альтернативой является:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:320
#, no-wrap
msgid "start_cmd=\"echo \\\"$dummy_msg\\\"\"\n"
msgstr "start_cmd=\"echo \\\"$dummy_msg\\\"\"\n"

#. type: Title ==
#: documentation/content/en/articles/rc-scripting/_index.adoc:323
#, no-wrap
msgid "Startup and shutdown of a simple daemon"
msgstr "Запуск и остановка простого демона"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:330
msgid ""
"We said earlier that man:rc.subr[8] could provide default methods.  "
"Obviously, such defaults cannot be too general.  They are suited for the "
"common case of starting and shutting down a simple daemon program.  Let us "
"assume now that we need to write an [.filename]#rc.d# script for such a "
"daemon called `mumbled`.  Here it is:"
msgstr ""
"Мы ранее говорили, что man:rc.subr[8] может предоставлять методы по "
"умолчанию. Очевидно, что такие методы не могут быть слишком общими. Они "
"подходят для стандартного случая запуска и остановки простого демона. "
"Предположим, что нам нужно написать скрипт [.filename]#rc.d# для такого "
"демона с именем `mumbled`. Вот он:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:339
#: documentation/content/en/articles/rc-scripting/_index.adoc:397
#: documentation/content/en/articles/rc-scripting/_index.adoc:634
#, no-wrap
msgid ""
"name=mumbled\n"
"rcvar=mumbled_enable\n"
msgstr ""
"name=mumbled\n"
"rcvar=mumbled_enable\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:341
#, no-wrap
msgid "command=\"/usr/sbin/${name}\" <.>\n"
msgstr "command=\"/usr/sbin/${name}\" <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:344
#: documentation/content/en/articles/rc-scripting/_index.adoc:443
#: documentation/content/en/articles/rc-scripting/_index.adoc:649
#: documentation/content/en/articles/rc-scripting/_index.adoc:876
#, no-wrap
msgid ""
"load_rc_config $name\n"
"run_rc_command \"$1\"\n"
msgstr ""
"load_rc_config $name\n"
"run_rc_command \"$1\"\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:348
msgid ""
"Pleasingly simple, isn't it? Let us examine our little script.  The only new "
"thing to note is as follows:"
msgstr ""
"Приятно просто, не так ли? Давайте рассмотрим наш небольшой скрипт. "
"Единственное новое, на что стоит обратить внимание, это следующее:"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:352
msgid ""
"&#10122; The `command` variable is meaningful to man:rc.subr[8].  If it is "
"set, man:rc.subr[8] will act according to the scenario of serving a "
"conventional daemon.  In particular, the default methods will be provided "
"for such arguments: `start`, `stop`, `restart`, `poll`, and `status`."
msgstr ""
"&#10122; Переменная `command` имеет значение для man:rc.subr[8]. Если она "
"установлена, man:rc.subr[8] будет действовать по сценарию обслуживания "
"обычного демона. В частности, будут предоставлены стандартные методы для "
"таких аргументов: `start`, `stop`, `restart`, `poll` и `status`."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:361
msgid ""
"The daemon will be started by running `$command` with command-line flags "
"specified by `$mumbled_flags`.  Thus all the input data for the default "
"`start` method are available in the variables set by our script.  Unlike "
"`start`, other methods may require additional information about the process "
"started.  For instance, `stop` must know the PID of the process to terminate "
"it.  In the present case, man:rc.subr[8] will scan through the list of all "
"processes, looking for a process with its name equal to `procname`.  The "
"latter is another variable of meaning to man:rc.subr[8], and its value "
"defaults to that of `command`.  In other words, when we set `command`, "
"`procname` is effectively set to the same value.  This enables our script to "
"kill the daemon and to check if it is running in the first place."
msgstr ""
"Демон будет запущен выполнением `$command` с флагами командной строки, "
"указанными в `$mumbled_flags`. Таким образом, все входные данные для метода "
"`start` по умолчанию доступны в переменных, установленных нашим скриптом. В "
"отличие от `start`, другие методы могут требовать дополнительной информации "
"о запущенном процессе. Например, `stop` должен знать PID процесса, чтобы "
"завершить его. В данном случае, man:rc.subr[8] будет просматривать список "
"всех процессов, ища процесс с именем, равным `procname`. Последний является "
"ещё одной значимой переменной для man:rc.subr[8], и её значение по умолчанию "
"совпадает со значением `command`. Другими словами, когда мы устанавливаем "
"`command`, `procname` фактически устанавливается в то же значение. Это "
"позволяет нашему скрипту завершить демон и проверить, запущен ли он вообще."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:368
msgid ""
"Some programs are in fact executable scripts.  The system runs such a script "
"by starting its interpreter and passing the name of the script to it as a "
"command-line argument.  This is reflected in the list of processes, which "
"can confuse man:rc.subr[8].  You should additionally set "
"`command_interpreter` to let man:rc.subr[8] know the actual name of the "
"process if `$command` is a script."
msgstr ""
"Некоторые программы на самом деле являются исполняемыми скриптами. Система "
"запускает такие скрипты, запуская их интерпретатор и передавая ему имя "
"скрипта в качестве аргумента командной строки. Это отражается в списке "
"процессов, что может сбить с толку man:rc.subr[8]. Дополнительно следует "
"установить `command_interpreter`, чтобы man:rc.subr[8] знал фактическое имя "
"процесса, если `$command` является скриптом."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:374
msgid ""
"For each [.filename]#rc.d# script, there is an optional man:rc.conf[5] "
"variable that takes precedence over `command`.  Its name is constructed as "
"follows: `${name}_program`, where `name` is the mandatory variable we "
"discussed crossref:rc-scripting[name-var, earlier].  E.g., in this case it "
"will be `mumbled_program`.  It is man:rc.subr[8] that arranges `${name}"
"_program` to override `command`."
msgstr ""
"Для каждого скрипта [.filename]#rc.d# существует необязательная переменная "
"man:rc.conf[5], которая имеет приоритет над `command`. Её имя формируется "
"следующим образом: `${name}_program`, где `name` — это обязательная "
"переменная, которую мы обсуждали crossref:rc-scripting[name-var, ранее]. "
"Например, в данном случае это будет `mumbled_program`. Именно man:rc.subr[8] "
"обеспечивает переопределение `command` с помощью `${name}_program`."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:378
msgid ""
"Of course, man:sh[1] will permit you to set `${name}_program` from man:rc."
"conf[5] or the script itself even if `command` is unset.  In that case, the "
"special properties of `${name}_program` are lost, and it becomes an ordinary "
"variable your script can use for its own purposes.  However, the sole use of "
"`${name}_program` is discouraged because using it together with `command` "
"became an idiom of [.filename]#rc.d# scripting."
msgstr ""
"Конечно, man:sh[1] позволяет установить `${name}_program` из man:rc.conf[5] "
"или самого скрипта, даже если `command` не задан. В этом случае специальные "
"свойства `${name}_program` теряются, и она становится обычной переменной, "
"которую ваш скрипт может использовать для своих целей. Однако использование `"
"${name}_program` в одиночку не рекомендуется, так как совместное "
"использование с `command` стало идиомой в [.filename]#rc.d# скриптах."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:381
msgid ""
"For more detailed information on default methods, refer to man:rc.subr[8]."
msgstr ""
"Для получения более подробной информации о стандартных методах обратитесь к "
"man:rc.subr[8]."

#. type: Title ==
#: documentation/content/en/articles/rc-scripting/_index.adoc:383
#, no-wrap
msgid "Startup and shutdown of an advanced daemon"
msgstr "Запуск и остановка продвинутого демона"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:388
msgid ""
"Let us add some meat onto the bones of the previous script and make it more "
"complex and featureful.  The default methods can do a good job for us, but "
"we may need some of their aspects tweaked.  Now we will learn how to tune "
"the default methods to our needs."
msgstr ""
"Добавим немного мяса к костям предыдущего скрипта и сделаем его более "
"сложным и функциональным. Стандартные методы могут хорошо справляться с "
"задачами, но иногда требуется их тонкая настройка. Теперь мы узнаем, как "
"адаптировать стандартные методы под наши нужды."

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:400
#, no-wrap
msgid ""
"command=\"/usr/sbin/${name}\"\n"
"command_args=\"mock arguments > /dev/null 2>&1\" <.>\n"
msgstr ""
"command=\"/usr/sbin/${name}\"\n"
"command_args=\"mock arguments > /dev/null 2>&1\" <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:402
#, no-wrap
msgid "pidfile=\"/var/run/${name}.pid\" <.>\n"
msgstr "pidfile=\"/var/run/${name}.pid\" <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:404
#, no-wrap
msgid "required_files=\"/etc/${name}.conf /usr/share/misc/${name}.rules\" <.>\n"
msgstr "required_files=\"/etc/${name}.conf /usr/share/misc/${name}.rules\" <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:406
#, no-wrap
msgid "sig_reload=\"USR1\" <.>\n"
msgstr "sig_reload=\"USR1\" <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:409
#, no-wrap
msgid ""
"start_precmd=\"${name}_prestart\" <.>\n"
"stop_postcmd=\"echo Bye-bye\" <.>\n"
msgstr ""
"start_precmd=\"${name}_prestart\" <.>\n"
"stop_postcmd=\"echo Bye-bye\" <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:411
#, no-wrap
msgid "extra_commands=\"reload plugh xyzzy\" <.>\n"
msgstr "extra_commands=\"reload plugh xyzzy\" <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:414
#, no-wrap
msgid ""
"plugh_cmd=\"mumbled_plugh\" <.>\n"
"xyzzy_cmd=\"echo 'Nothing happens.'\"\n"
msgstr ""
"plugh_cmd=\"mumbled_plugh\" <.>\n"
"xyzzy_cmd=\"echo 'Nothing happens.'\"\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:435
#, no-wrap
msgid ""
"mumbled_prestart()\n"
"{\n"
"\tif checkyesno mumbled_smart; then <.>\n"
"\t\trc_flags=\"-o smart ${rc_flags}\" <.>\n"
"\tfi\n"
"\tcase \"$mumbled_mode\" in\n"
"\tfoo)\n"
"\t\trc_flags=\"-frotz ${rc_flags}\"\n"
"\t\t;;\n"
"\tbar)\n"
"\t\trc_flags=\"-baz ${rc_flags}\"\n"
"\t\t;;\n"
"\t*)\n"
"\t\twarn \"Invalid value for mumbled_mode\" <.>\n"
"\t\treturn 1 <.>\n"
"\t\t;;\n"
"\tesac\n"
"\trun_rc_command xyzzy <.>\n"
"\treturn 0\n"
"}\n"
msgstr ""
"mumbled_prestart()\n"
"{\n"
"\tif checkyesno mumbled_smart; then <.>\n"
"\t\trc_flags=\"-o smart ${rc_flags}\" <.>\n"
"\tfi\n"
"\tcase \"$mumbled_mode\" in\n"
"\tfoo)\n"
"\t\trc_flags=\"-frotz ${rc_flags}\"\n"
"\t\t;;\n"
"\tbar)\n"
"\t\trc_flags=\"-baz ${rc_flags}\"\n"
"\t\t;;\n"
"\t*)\n"
"\t\twarn \"Invalid value for mumbled_mode\" <.>\n"
"\t\treturn 1 <.>\n"
"\t\t;;\n"
"\tesac\n"
"\trun_rc_command xyzzy <.>\n"
"\treturn 0\n"
"}\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:440
#, no-wrap
msgid ""
"mumbled_plugh() <.>\n"
"{\n"
"\techo 'A hollow voice says \"plugh\".'\n"
"}\n"
msgstr ""
"mumbled_plugh() <.>\n"
"{\n"
"\techo 'A hollow voice says \"plugh\".'\n"
"}\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:448
msgid ""
"&#10122; Additional arguments to `$command` can be passed in "
"`command_args`.  They will be added to the command line after `"
"$mumbled_flags`.  Since the final command line is passed to `eval` for its "
"actual execution, input and output redirections can be specified in "
"`command_args`."
msgstr ""
"&#10122; Дополнительные аргументы для `$command` могут быть переданы в "
"`command_args`. Они будут добавлены в командную строку после `"
"$mumbled_flags`. Поскольку итоговая командная строка передаётся в `eval` для "
"фактического выполнения, перенаправления ввода и вывода могут быть указаны в "
"`command_args`."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:455
msgid ""
"_Never_ include dashed options, like `-X` or `--foo`, in `command_args`.  "
"The contents of `command_args` will appear at the end of the final command "
"line, hence they are likely to follow arguments present in `${name}_flags`; "
"but most commands will not recognize dashed options after ordinary "
"arguments.  A better way of passing additional options to `$command` is to "
"add them to the beginning of `${name}_flags`.  Another way is to modify "
"`rc_flags` crossref:rc-scripting[rc-flags, as shown later]."
msgstr ""
"Никогда не включайте параметры с дефисами, такие как `-X` или `--foo`, в "
"`command_args`. Содержимое `command_args` будет добавлено в конец итоговой "
"командной строки, поэтому, скорее всего, окажется после аргументов, "
"указанных в `${name}_flags`; однако большинство команд не распознают "
"параметры с дефисами после обычных аргументов. Лучший способ передать "
"дополнительные параметры в `$command` — добавить их в начало `${name}"
"_flags`. Другой способ — изменить `rc_flags` crossref:rc-scripting[rc-flags, "
"как показано далее]."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:459
msgid ""
"&#10123; A good-mannered daemon should create a _pidfile_ so that its "
"process can be found more easily and reliably.  The variable `pidfile`, if "
"set, tells man:rc.subr[8] where it can find the pidfile for its default "
"methods to use."
msgstr ""
"&#10123; Вежливый демон должен создавать _pidfile_, чтобы его процесс можно "
"было найти проще и надёжнее. Переменная `pidfile`, если она установлена, "
"указывает man:rc.subr[8], где можно найти pidfile для использования его "
"стандартными методами."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:464
msgid ""
"In fact, man:rc.subr[8] will also use the pidfile to see if the daemon is "
"already running before starting it.  This check can be skipped by using the "
"`faststart` argument."
msgstr ""
"На самом деле, man:rc.subr[8] также использует pidfile для проверки, запущен "
"ли демон, перед его запуском. Эту проверку можно пропустить, используя "
"аргумент `faststart`."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:469
msgid ""
"&#10124; If the daemon cannot run unless certain files exist, just list them "
"in `required_files`, and man:rc.subr[8] will check that those files do exist "
"before starting the daemon.  There also are `required_dirs` and "
"`required_vars` for directories and environment variables, respectively.  "
"They all are described in detail in man:rc.subr[8]."
msgstr ""
"&#10124; Если демон не может работать без определённых файлов, просто "
"укажите их в `required_files`, и man:rc.subr[8] проверит их наличие перед "
"запуском демона. Также существуют `required_dirs` и `required_vars` для "
"каталогов и переменных окружения соответственно. Все они подробно описаны в "
"man:rc.subr[8]."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:473
msgid ""
"The default method from man:rc.subr[8] can be forced to skip the "
"prerequisite checks by using `forcestart` as the argument to the script."
msgstr ""
"Метод по умолчанию из man:rc.subr[8] можно принудительно заставить "
"пропустить проверки предварительных условий, используя аргумент `forcestart` "
"в скрипте."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:479
msgid ""
"&#10125; We can customize signals to send to the daemon in case they differ "
"from the well-known ones.  In particular, `sig_reload` specifies the signal "
"that makes the daemon reload its configuration; it is SIGHUP by default.  "
"Another signal is sent to stop the daemon process; the default is SIGTERM, "
"but this can be changed by setting `sig_stop` appropriately."
msgstr ""
"&#10125; Мы можем настроить сигналы, отправляемые демону, если они "
"отличаются от общеизвестных. В частности, `sig_reload` указывает сигнал, "
"который заставляет демона перезагрузить свою конфигурацию; по умолчанию это "
"SIGHUP. Другой сигнал отправляется для остановки процесса демона; по "
"умолчанию используется SIGTERM, но это можно изменить, установив `sig_stop` "
"соответствующим образом."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:484
msgid ""
"The signal names should be specified to man:rc.subr[8] without the `SIG` "
"prefix, as it is shown in the example.  The FreeBSD version of man:kill[1] "
"can recognize the `SIG` prefix, but the versions from other OS types may not."
msgstr ""
"Имена сигналов должны указываться для man:rc.subr[8] без префикса `SIG`, как "
"показано в примере. Версия man:kill[1] в FreeBSD может распознавать префикс "
"`SIG`, но версии из других типов ОС могут не поддерживать его."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:489
msgid ""
"&#10126;&#10127; Performing additional tasks before or after the default "
"methods is easy.  For each command-argument supported by our script, we can "
"define `argument_precmd` and `argument_postcmd`.  These man:sh[1] commands "
"are invoked before and after the respective method, as it is evident from "
"their names."
msgstr ""
"&#10126;&#10127; Выполнение дополнительных задач до или после стандартных "
"методов — это просто. Для каждого аргумента команды, поддерживаемого нашим "
"скриптом, мы можем определить `argument_precmd` и `argument_postcmd`. Эти "
"команды man:sh[1] вызываются до и после соответствующего метода, что "
"очевидно из их названий."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:495
msgid ""
"Overriding a default method with a custom `argument_cmd` still does not "
"prevent us from making use of `argument_precmd` or `argument_postcmd` if we "
"need to.  In particular, the former is good for checking custom, "
"sophisticated conditions that should be met before performing the command "
"itself.  Using `argument_precmd` along with `argument_cmd` lets us logically "
"separate the checks from the action."
msgstr ""
"Переопределение стандартного метода с помощью пользовательского "
"`argument_cmd` всё равно не мешает нам использовать `argument_precmd` или "
"`argument_postcmd`, если это необходимо. В частности, первый полезен для "
"проверки пользовательских сложных условий, которые должны быть выполнены "
"перед выполнением самой команды. Использование `argument_precmd` вместе с "
"`argument_cmd` позволяет логически разделить проверки от действия."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:498
msgid ""
"Do not forget that you can cram any valid man:sh[1] expressions into the "
"methods, pre-, and post-commands you define.  Just invoking a function that "
"makes the real job is a good style in most cases, but never let style limit "
"your understanding of what is going on behind the curtain."
msgstr ""
"Не забывайте, что вы можете вставлять любые допустимые выражения из man:"
"sh[1] в определяемые вами методы, а также команды pre- и post-. Просто "
"вызывать функцию, которая выполняет основную работу, — это хороший стиль в "
"большинстве случаев, но никогда не позволяйте стилю ограничивать ваше "
"понимание того, что происходит за кулисами."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:501
msgid ""
"&#10128; If we would like to implement custom arguments, which can also be "
"thought of as _commands_ to our script, we need to list them in "
"`extra_commands` and provide methods to handle them."
msgstr ""
"&#10128; Если мы хотим реализовать пользовательские аргументы, которые также "
"можно рассматривать как _команды_ для нашего скрипта, необходимо перечислить "
"их в `extra_commands` и предоставить методы для их обработки."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:509
msgid ""
"The `reload` command is special. On the one hand, it has a preset method in "
"man:rc.subr[8].  On the other hand, `reload` is not offered by default.  The "
"reason is that not all daemons use the same reload mechanism and some have "
"nothing to reload at all.  So we need to ask explicitly that the builtin "
"functionality be provided.  We can do so via `extra_commands`."
msgstr ""
"Команда `reload` является особенной. С одной стороны, у неё есть "
"предустановленный метод в man:rc.subr[8]. С другой стороны, `reload` не "
"предлагается по умолчанию. Причина в том, что не все демоны используют "
"одинаковый механизм перезагрузки, а у некоторых вообще нет ничего для "
"перезагрузки. Поэтому нам нужно явно запросить предоставление встроенной "
"функциональности. Это можно сделать с помощью `extra_commands`."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:513
msgid ""
"What do we get from the default method for `reload`? Quite often daemons "
"reload their configuration upon reception of a signal - typically, SIGHUP.  "
"Therefore man:rc.subr[8] attempts to reload the daemon by sending a signal "
"to it.  The signal is preset to SIGHUP but can be customized via "
"`sig_reload` if necessary."
msgstr ""
"Что мы получаем от метода по умолчанию для `reload`? Довольно часто демоны "
"перезагружают свою конфигурацию при получении сигнала — обычно, SIGHUP. "
"Поэтому man:rc.subr[8] пытается перезагрузить демона, отправляя ему сигнал. "
"Сигнал предустановлен на SIGHUP, но может быть изменён через `sig_reload` "
"при необходимости."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:518
msgid ""
"&#10129;&#9454; Our script supports two non-standard commands, `plugh` and "
"`xyzzy`.  We saw them listed in `extra_commands`, and now it is time to "
"provide methods for them.  The method for `xyzzy` is just inlined while that "
"for `plugh` is implemented as the `mumbled_plugh` function."
msgstr ""
"&#10129;&#9454; Наш скрипт поддерживает две нестандартные команды: `plugh` и "
"`xyzzy`. Мы видели их в списке `extra_commands`, и теперь пришло время "
"реализовать методы для них. Метод для `xyzzy` просто встроен в код, а для "
"`plugh` он реализован как функция `mumbled_plugh`."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:522
msgid ""
"Non-standard commands are not invoked during startup or shutdown.  Usually "
"they are for the system admin's convenience.  They can also be used from "
"other subsystems, e.g., man:devd[8] if specified in man:devd.conf[5]."
msgstr ""
"Нестандартные команды не вызываются во время запуска или завершения работы. "
"Обычно они предназначены для удобства системного администратора. Они также "
"могут использоваться другими подсистемами, например, man:devd[8], если "
"указаны в man:devd.conf[5]."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:525
msgid ""
"The full list of available commands can be found in the usage line printed "
"by man:rc.subr[8] when the script is invoked without arguments.  For "
"example, here is the usage line from the script under study:"
msgstr ""
"Полный список доступных команд можно найти в строке использования, выводимой "
"man:rc.subr[8], когда скрипт вызывается без аргументов. Например, вот строка "
"использования из изучаемого скрипта:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:530
#, no-wrap
msgid ""
"# /etc/rc.d/mumbled\n"
"Usage: /etc/rc.d/mumbled [fast|force|one](start|stop|restart|rcvar|reload|plugh|xyzzy|status|poll)\n"
msgstr ""
"# /etc/rc.d/mumbled\n"
"Usage: /etc/rc.d/mumbled [fast|force|one](start|stop|restart|rcvar|reload|plugh|xyzzy|status|poll)\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:537
msgid ""
"&#9453; A script can invoke its own standard or non-standard commands if "
"needed.  This may look similar to calling functions, but we know that "
"commands and shell functions are not always the same thing.  For instance, "
"`xyzzy` is not implemented as a function here.  In addition, there can be a "
"pre-command and post-command, which should be invoked orderly.  So the "
"proper way for a script to run its own command is by means of man:rc."
"subr[8], as shown in the example."
msgstr ""
"&#9453; Скрипт может вызывать свои собственные стандартные или нестандартные "
"команды, если это необходимо.  Это может выглядеть похоже на вызов функций, "
"но мы знаем, что команды и функции оболочки не всегда одно и то же.  "
"Например, `xyzzy` не реализован как функция в данном случае.  Кроме того, "
"могут существовать пред-команда и пост-команда, которые должны вызываться в "
"определённом порядке.  Поэтому правильный способ для скрипта выполнить свою "
"собственную команду — с помощью man:rc.subr[8], как показано в примере."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:543
msgid ""
"&#10130; A handy function named `checkyesno` is provided by man:rc.subr[8].  "
"It takes a variable name as its argument and returns a zero exit code if and "
"only if the variable is set to `YES`, or `TRUE`, or `ON`, or `1`, case "
"insensitive; a non-zero exit code is returned otherwise.  In the latter "
"case, the function tests the variable for being set to `NO`, `FALSE`, `OFF`, "
"or `0`, case insensitive; it prints a warning message if the variable "
"contains anything else, i.e., junk."
msgstr ""
"&#10130; Полезная функция `checkyesno` предоставляется man:rc.subr[8]. Она "
"принимает имя переменной в качестве аргумента и возвращает нулевой код "
"выхода только если переменная установлена в `YES`, `TRUE`, `ON` или `1`, без "
"учёта регистра; в противном случае возвращается ненулевой код выхода. В "
"последнем случае функция проверяет, установлена ли переменная в `NO`, "
"`FALSE`, `OFF` или `0`, также без учёта регистра; если переменная содержит "
"что-то иное (т.е. мусор), функция выводит предупреждение."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:545
msgid ""
"Keep in mind that for man:sh[1] a zero exit code means true and a non-zero "
"exit code means false."
msgstr ""
"Имейте в виду, что для man:sh[1] нулевой код возврата означает истину, а "
"ненулевой код возврата означает ложь."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:550
msgid ""
"The `checkyesno` function takes a __variable name__.  Do not pass the "
"expanded _value_ of a variable to it; it will not work as expected."
msgstr ""
"Функция `checkyesno` принимает __имя переменной__. Не передавайте ей "
"_значение_ переменной; это не будет работать, как ожидается."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:552
msgid "The following is the correct usage of `checkyesno`:"
msgstr "Ниже приведено правильное использование `checkyesno`:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:558
#, no-wrap
msgid ""
"if checkyesno mumbled_enable; then\n"
"        foo\n"
"fi\n"
msgstr ""
"if checkyesno mumbled_enable; then\n"
"        foo\n"
"fi\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:561
msgid ""
"On the contrary, calling `checkyesno` as shown below will not work - at "
"least not as expected:"
msgstr ""
"Напротив, вызов `checkyesno`, как показано ниже, не сработает — по крайней "
"мере, не так, как ожидается:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:567
#, no-wrap
msgid ""
"if checkyesno \"${mumbled_enable}\"; then\n"
"        foo\n"
"fi\n"
msgstr ""
"if checkyesno \"${mumbled_enable}\"; then\n"
"        foo\n"
"fi\n"

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:572
msgid ""
"&#10131; [[rc-flags]]We can affect the flags to be passed to `$command` by "
"modifying `rc_flags` in `$start_precmd`."
msgstr ""
"&#10131; [[rc-flags]] Мы можем влиять на флаги, передаваемые команде `"
"$command`, изменяя `rc_flags` в `$start_precmd`."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:576
msgid ""
"&#9451; In certain cases we may need to emit an important message that "
"should go to `syslog` as well.  This can be done easily with the following "
"man:rc.subr[8] functions: `debug`, `info`, `warn`, and `err`.  The latter "
"function then exits the script with the code specified."
msgstr ""
"&#9451; В некоторых случаях может потребоваться вывести важное сообщение, "
"которое также должно попасть в `syslog`. Это можно легко сделать с помощью "
"следующих функций man:rc.subr[8]: `debug`, `info`, `warn` и `err`. Последняя "
"функция завершает выполнение скрипта с указанным кодом."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:580
msgid ""
"&#9452; The exit codes from methods and their pre-commands are not just "
"ignored by default.  If `argument_precmd` returns a non-zero exit code, the "
"main method will not be performed.  In turn, `argument_postcmd` will not be "
"invoked unless the main method returns a zero exit code."
msgstr ""
"&#9452; Коды выхода из методов и их предварительных команд не просто "
"игнорируются по умолчанию. Если `argument_precmd` возвращает ненулевой код "
"выхода, основной метод не будет выполнен. В свою очередь, `argument_postcmd` "
"не будет вызван, если основной метод возвращает ненулевой код выхода."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:584
msgid ""
"However, man:rc.subr[8] can be instructed from the command line to ignore "
"those exit codes and invoke all commands anyway by prefixing an argument "
"with `force`, as in `forcestart`."
msgstr ""
"Однако man:rc.subr[8] можно указать из командной строки игнорировать эти "
"коды завершения и выполнять все команды в любом случае, добавив префикс "
"`force` к аргументу, например `forcestart`."

#. type: Title ==
#: documentation/content/en/articles/rc-scripting/_index.adoc:587
#, no-wrap
msgid "Connecting a script to the rc.d framework"
msgstr "Подключение скрипта к инфраструктуре rc.d"

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:594
msgid ""
"After a script has been written, it needs to be integrated into [."
"filename]#rc.d#.  The crucial step is to install the script in [.filename]#/"
"etc/rc.d# (for the base system) or [.filename]#/usr/local/etc/rc.d# (for "
"ports).  Both [.filename]#bsd.prog.mk# and [.filename]#bsd.port.mk# provide "
"convenient hooks for that, and usually you do not have to worry about the "
"proper ownership and mode.  System scripts should be installed from [."
"filename]#src/libexec/rc/rc.d# through the [.filename]#Makefile# found "
"there.  Port scripts can be installed using `USE_RC_SUBR` as described "
"extref:{porters-handbook}special[in the Porter's Handbook, rc-scripts]."
msgstr ""
"После написания скрипта его необходимо интегрировать в [.filename]#rc.d#. "
"Ключевой шаг — установка скрипта в [.filename]#/etc/rc.d# (для базовой "
"системы) или [.filename]#/usr/local/etc/rc.d# (для портов). И [.filename]#bsd"
".prog.mk#, и [.filename]#bsd.port.mk# предоставляют удобные механизмы для "
"этого, и обычно вам не нужно беспокоиться о правильных правах доступа и "
"режиме. Системные скрипты должны устанавливаться из [.filename]#src/libexec/"
"rc/rc.d# через [.filename]#Makefile#, находящийся там. Скрипты портов можно "
"установить с помощью `USE_RC_SUBR`, как описано extref:{porters-"
"handbook}special[в Руководстве FreeBSD по созданию портов, rc-scripts]."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:599
msgid ""
"However, we should consider beforehand the place of our script in the system "
"startup sequence.  The service handled by our script is likely to depend on "
"other services.  For instance, a network daemon cannot function without the "
"network interfaces and routing up and running.  Even if a service seems to "
"demand nothing, it can hardly start before the basic filesystems have been "
"checked and mounted."
msgstr ""
"Однако следует заранее продумать место нашего скрипта в последовательности "
"запуска системы.  Скорее всего, обслуживаемый нашим скриптом сервис зависит "
"от других сервисов.  Например, сетевой демон не может работать без поднятых "
"сетевых интерфейсов и маршрутизации.  Даже если сервис, казалось бы, ничего "
"не требует, он вряд ли сможет запуститься до проверки и монтирования "
"основных файловых систем."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:605
msgid ""
"We mentioned man:rcorder[8] already.  Now it is time to have a close look at "
"it.  In a nutshell, man:rcorder[8] takes a set of files, examines their "
"contents, and prints a dependency-ordered list of files from the set to "
"`stdout`.  The point is to keep dependency information _inside_ the files so "
"that each file can speak for itself only.  A file can specify the following "
"information:"
msgstr ""
"Мы уже упоминали man:rcorder[8]. Теперь пришло время рассмотреть его "
"подробнее. В двух словах, man:rcorder[8] принимает набор файлов, анализирует "
"их содержимое и выводит на `stdout` список этих файлов, упорядоченный по "
"зависимостям. Главная идея заключается в том, чтобы хранить информацию о "
"зависимостях _внутри_ файлов, чтобы каждый файл мог описывать только себя. "
"Файл может содержать следующую информацию:"

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:607
msgid ""
"the names of the \"conditions\" (which means services to us) it __provides__;"
msgstr ""
"имена \"условий\" (что для нас означает сервисы), которые он "
"__предоставляет__;"

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:608
msgid "the names of the \"conditions\" it __requires__;"
msgstr "имена \"условий\", которые он __требует__;"

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:609
msgid "the names of the \"conditions\" this file should run __before__;"
msgstr "имена \"условий\", перед которыми должен выполняться этот файл;"

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:610
msgid ""
"additional _keywords_ that can be used to select a subset from the whole set "
"of files (man:rcorder[8] can be instructed via options to include or omit "
"the files having particular keywords listed.)"
msgstr ""
"дополнительные _ключевые слова_, которые могут использоваться для выбора "
"подмножества из всего набора файлов (man:rcorder[8] может быть настроен с "
"помощью опций для включения или исключения файлов, содержащих указанные "
"ключевые слова.)"

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:615
msgid ""
"It is no surprise that man:rcorder[8] can handle only text files with a "
"syntax close to that of man:sh[1].  That is, special lines understood by man:"
"rcorder[8] look like man:sh[1] comments.  The syntax of such special lines "
"is rather rigid to simplify their processing.  See man:rcorder[8] for "
"details."
msgstr ""
"Неудивительно, что man:rcorder[8] может обрабатывать только текстовые файлы "
"с синтаксисом, близким к man:sh[1]. То есть специальные строки, понимаемые "
"man:rcorder[8], выглядят как комментарии в man:sh[1]. Синтаксис таких "
"специальных строк довольно жёсткий, чтобы упростить их обработку. "
"Подробности см. в man:rcorder[8]."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:618
msgid ""
"Besides using man:rcorder[8] special lines, a script can insist on its "
"dependency upon another service by just starting it forcibly.  This can be "
"needed when the other service is optional and will not start by itself "
"because the system admin has disabled it mistakenly in man:rc.conf[5]."
msgstr ""
"Помимо использования специальных строк man:rcorder[8], скрипт может "
"настаивать на своей зависимости от другой службы, просто принудительно "
"запуская её. Это может быть необходимо, когда другая служба является "
"опциональной и не запускается самостоятельно, потому что системный "
"администратор ошибочно отключил её в man:rc.conf[5]."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:620
msgid ""
"With this general knowledge in mind, let us consider the simple daemon "
"script enhanced with dependency stuff:"
msgstr ""
"С учётом этих общих знаний рассмотрим простой скрипт демона, дополненный "
"зависимостями:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:629
#, no-wrap
msgid ""
"# PROVIDE: mumbled oldmumble <.>\n"
"# REQUIRE: DAEMON cleanvar frotz <.>\n"
"# BEFORE:  LOGIN <.>\n"
"# KEYWORD: nojail shutdown <.>\n"
msgstr ""
"# PROVIDE: mumbled oldmumble <.>\n"
"# REQUIRE: DAEMON cleanvar frotz <.>\n"
"# BEFORE:  LOGIN <.>\n"
"# KEYWORD: nojail shutdown <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:637
#, no-wrap
msgid ""
"command=\"/usr/sbin/${name}\"\n"
"start_precmd=\"${name}_prestart\"\n"
msgstr ""
"command=\"/usr/sbin/${name}\"\n"
"start_precmd=\"${name}_prestart\"\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:646
#, no-wrap
msgid ""
"mumbled_prestart()\n"
"{\n"
"\tif ! checkyesno frotz_enable && \\\n"
"\t    ! /etc/rc.d/frotz forcestatus 1>/dev/null 2>&1; then\n"
"\t\tforce_depend frotz || return 1 <.>\n"
"\tfi\n"
"\treturn 0\n"
"}\n"
msgstr ""
"mumbled_prestart()\n"
"{\n"
"\tif ! checkyesno frotz_enable && \\\n"
"\t    ! /etc/rc.d/frotz forcestatus 1>/dev/null 2>&1; then\n"
"\t\tforce_depend frotz || return 1 <.>\n"
"\tfi\n"
"\treturn 0\n"
"}\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:652
msgid "As before, detailed analysis follows:"
msgstr "Как и ранее, следует детальный анализ:"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:655
msgid ""
"&#10122; That line declares the names of \"conditions\" our script "
"provides.  Now other scripts can record a dependency on our script by those "
"names."
msgstr ""
"&#10122; Эта строка объявляет названия \"условий\", которые предоставляет "
"наш скрипт. Теперь другие скрипты могут указывать зависимость от нашего "
"скрипта по этим именам."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:660
msgid ""
"Usually a script specifies a single condition provided.  However, nothing "
"prevents us from listing several conditions there, e.g., for compatibility "
"reasons."
msgstr ""
"Обычно скрипт указывает одно предоставленное условие. Однако ничто не мешает "
"нам перечислить несколько условий, например, по причинам совместимости."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:662
msgid ""
"In any case, the name of the main, or the only, `PROVIDE:` condition should "
"be the same as `${name}`."
msgstr ""
"В любом случае, название основного или единственного условия `PROVIDE:` "
"должно совпадать с `${name}`."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:666
msgid ""
"&#10123;&#10124; So our script indicates which \"conditions\" provided by "
"other scripts it depends on.  According to the lines, our script asks man:"
"rcorder[8] to put it after the script(s) providing [.filename]#DAEMON# and [."
"filename]#cleanvar#, but before that providing [.filename]#LOGIN#."
msgstr ""
"&#10123;&#10124; Таким образом, наш скрипт указывает, от каких \"условий\", "
"предоставляемых другими скриптами, он зависит. Согласно строкам, наш скрипт "
"просит man:rcorder[8] разместить его после скрипта(ов), предоставляющих [."
"filename]#DAEMON# и [.filename]#cleanvar#, но перед тем, который "
"предоставляет [.filename]#LOGIN#."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:672
msgid ""
"The `BEFORE:` line should not be abused to work around an incomplete "
"dependency list in the other script.  The appropriate case for using `BEFORE:"
"` is when the other script does not care about ours, but our script can do "
"its task better if run before the other one.  A typical real-life example is "
"the network interfaces vs. the firewall: While the interfaces do not depend "
"on the firewall in doing their job, the system security will benefit from "
"the firewall being ready before there is any network traffic."
msgstr ""
"Строку `BEFORE:` не следует использовать для обхода неполного списка "
"зависимостей в другом скрипте. Правильный случай для использования `BEFORE:` "
"— когда другой скрипт не зависит от нашего, но наш скрипт может выполнить "
"свою задачу лучше, если запустится до другого. Типичный пример из реальной "
"жизни — сетевые интерфейсы и межсетевой экран: хотя интерфейсы не зависят от "
"межсетевого экрана при выполнении своей работы, безопасность системы "
"выиграет, если межсетевой экран будет готов до начала сетевого трафика."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:676
msgid ""
"Besides conditions corresponding to a single service each, there are meta-"
"conditions and their \"placeholder\" scripts used to ensure that certain "
"groups of operations are performed before others.  These are denoted by [."
"filename]#UPPERCASE# names.  Their list and purposes can be found in man:"
"rc[8]."
msgstr ""
"Помимо условий, соответствующих отдельным службам, существуют метаусловия и "
"их \"заглушки\" скриптов, используемые для обеспечения выполнения "
"определённых групп операций в заданном порядке. Они обозначаются именами в [."
"filename]#ВЕРХНЕМ РЕГИСТРЕ#. Их список и назначение можно найти в man:rc[8]."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:682
msgid ""
"Keep in mind that putting a service name in the `REQUIRE:` line does not "
"guarantee that the service will actually be running by the time our script "
"starts.  The required service may fail to start or just be disabled in man:"
"rc.conf[5].  Obviously, man:rcorder[8] cannot track such details, and man:"
"rc[8] will not do that either.  Consequently, the application started by our "
"script should be able to cope with any required services being unavailable.  "
"In certain cases, we can help it as discussed crossref:rc-"
"scripting[forcedep, below]"
msgstr ""
"Имейте в виду, что указание имени службы в строке `REQUIRE:` не гарантирует, "
"что служба действительно будет запущена к моменту старта нашего скрипта. "
"Требуемая служба может не запуститься или быть отключена в man:rc.conf[5]. "
"Очевидно, man:rcorder[8] не может отслеживать такие детали, и man:rc[8] тоже "
"этого не делает. Следовательно, приложение, запускаемое нашим скриптом, "
"должно быть способно обрабатывать ситуации, когда требуемые службы "
"недоступны. В некоторых случаях мы можем помочь ему, как описано в crossref:"
"rc-scripting[forcedep, ниже]"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:687
msgid ""
"[[keywords]]&#10125; As we remember from the above text, man:rcorder[8] "
"keywords can be used to select or leave out some scripts.  Namely any man:"
"rcorder[8] consumer can specify through `-k` and `-s` options which keywords "
"are on the \"keep list\" and \"skip list\", respectively.  From all the "
"files to be dependency sorted, man:rcorder[8] will pick only those having a "
"keyword from the keep list (unless empty) and not having a keyword from the "
"skip list."
msgstr ""
"[[keywords]]&#10125; Как мы помним из текста выше, ключевые слова man:"
"rcorder[8] могут использоваться для выбора или исключения некоторых "
"скриптов. А именно, любой потребитель man:rcorder[8] может указать с помощью "
"опций `-k` и `-s`, какие ключевые слова находятся в \"списке сохранения\" и "
"\"списке пропуска\" соответственно. Из всех файлов, подлежащих сортировке по "
"зависимостям, man:rcorder[8] выберет только те, которые имеют ключевое слово "
"из списка сохранения (если он не пуст) и не имеют ключевого слова из списка "
"пропуска."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:690
msgid ""
"In FreeBSD, man:rcorder[8] is used by [.filename]#/etc/rc# and [.filename]#/"
"etc/rc.shutdown#.  These two scripts define the standard list of FreeBSD [."
"filename]#rc.d# keywords and their meanings as follows:"
msgstr ""
"В FreeBSD, man:rcorder[8] используется [.filename]#/etc/rc# и [.filename]#/"
"etc/rc.shutdown#. Эти два скрипта определяют стандартный список ключевых "
"слов [.filename]#rc.d# FreeBSD и их значения следующим образом:"

#. type: Labeled list
#: documentation/content/en/articles/rc-scripting/_index.adoc:691
#, no-wrap
msgid "nojail"
msgstr "nojail"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:693
msgid ""
"The service is not for man:jail[8] environment.  The automatic startup and "
"shutdown procedures will ignore the script if inside a jail."
msgstr ""
"Сервис не предназначен для окружения man:jail[8]. Процедуры автоматического "
"запуска и остановки будут игнорировать скрипт, если он находится внутри "
"клетки."

#. type: Labeled list
#: documentation/content/en/articles/rc-scripting/_index.adoc:694
#, no-wrap
msgid "nostart"
msgstr "nostart"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:697
msgid ""
"The service is to be started manually or not started at all.  The automatic "
"startup procedure will ignore the script.  In conjunction with the [."
"filename]#shutdown# keyword, this can be used to write scripts that do "
"something only at system shutdown."
msgstr ""
"Служба должна запускаться вручную или не запускаться вовсе. Процедура "
"автоматического запуска проигнорирует скрипт. В сочетании с ключевым словом "
"[.filename]#shutdown# это может использоваться для написания скриптов, "
"выполняющих действия только при выключении системы."

#. type: Labeled list
#: documentation/content/en/articles/rc-scripting/_index.adoc:698
#, no-wrap
msgid "shutdown"
msgstr "shutdown"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:699
msgid ""
"This keyword is to be listed __explicitly__ if the service needs to be "
"stopped before system shutdown."
msgstr ""
"Этот ключевой параметр должен быть указан __явно__, если службу необходимо "
"остановить перед завершением работы системы."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:712
msgid ""
"When the system is going to shut down, [.filename]#/etc/rc.shutdown# runs.  "
"It assumes that most [.filename]#rc.d# scripts have nothing to do at that "
"time.  Therefore [.filename]#/etc/rc.shutdown# selectively invokes [."
"filename]#rc.d# scripts with the [.filename]#shutdown# keyword, effectively "
"ignoring the rest of the scripts.  For even faster shutdown, [.filename]#/"
"etc/rc.shutdown# passes the [.filename]#faststop# 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# runs the scripts in reverse dependency order.  "
"If writing a real [.filename]#rc.d# script, you should consider whether it "
"is relevant at system shutdown time.  E.g., if your script does its work in "
"response to the [.filename]#start# command only, then you need not to "
"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 man:halt[8].  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."
msgstr ""
"Когда система собирается завершить работу, выполняется [.filename]#/etc/rc."
"shutdown#. Предполагается, что большинству скриптов [.filename]#rc.d# в этот "
"момент нечего делать. Поэтому [.filename]#/etc/rc.shutdown# выборочно "
"запускает скрипты [.filename]#rc.d# с ключевым словом [.filename]#shutdown#, "
"фактически игнорируя остальные скрипты. Для ещё более быстрого завершения "
"работы [.filename]#/etc/rc.shutdown# передаёт команду [.filename]#faststop# "
"запускаемым скриптам, чтобы они пропускали предварительные проверки, "
"например, проверку pid-файла. Поскольку зависимые службы должны быть "
"остановлены до своих зависимостей, [.filename]#/etc/rc.shutdown# запускает "
"скрипты в обратном порядке зависимостей. Если вы пишете настоящий скрипт [."
"filename]#rc.d#, стоит подумать, актуален ли он во время завершения работы "
"системы. Например, если ваш скрипт выполняет свою работу только в ответ на "
"команду [.filename]#start#, то включать это ключевое слово не нужно. Однако "
"если ваш скрипт управляет службой, вероятно, стоит остановить её до того, "
"как система перейдёт к финальной стадии завершения работы, описанной в man:"
"halt[8]. В частности, службу следует останавливать явно, если для её "
"корректного завершения требуется значительное время или специальные "
"действия. Типичный пример такой службы — система управления базами данных."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:716
msgid ""
"[[forcedep]]&#10126; To begin with, `force_depend` should be used with much "
"care.  It is generally better to revise the hierarchy of configuration "
"variables for your [.filename]#rc.d# scripts if they are interdependent."
msgstr ""
"[[forcedep]]&#10126; Прежде всего, `force_depend` следует использовать с "
"большой осторожностью. Обычно лучше пересмотреть иерархию конфигурационных "
"переменных для ваших [.filename]#rc.d# скриптов, если они взаимозависимы."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:725
msgid ""
"If you still cannot do without `force_depend`, the example offers an idiom "
"of how to invoke it conditionally.  In the example, our `mumbled` daemon "
"requires that another one, `frotz`, be started in advance.  However, `frotz` "
"is optional, too; and man:rcorder[8] knows nothing about such details.  "
"Fortunately, our script has access to all man:rc.conf[5] variables.  If "
"`frotz_enable` is true, we hope for the best and rely on [.filename]#rc.d# "
"to have started `frotz`.  Otherwise we forcibly check the status of "
"`frotz`.  Finally, we enforce our dependency on `frotz` if it is found to be "
"not running.  A warning message will be emitted by `force_depend` because it "
"should be invoked only if a misconfiguration has been detected."
msgstr ""
"Если вам всё ещё не обойтись без `force_depend`, в примере показано, как "
"вызвать его условно. В примере наш демон `mumbled` требует, чтобы другой "
"демон, `frotz`, был запущен заранее. Однако `frotz` также является "
"опциональным, и man:rcorder[8] ничего не знает о таких деталях. К счастью, "
"наш скрипт имеет доступ ко всем переменным man:rc.conf[5]. Если "
"`frotz_enable` имеет значение true, мы надеемся на лучшее и полагаемся на [."
"filename]#rc.d#, что `frotz` был запущен. В противном случае мы "
"принудительно проверяем статус `frotz`. Наконец, мы принудительно "
"устанавливаем зависимость от `frotz`, если обнаруживаем, что он не запущен. "
"`force_depend` выдаст предупреждение, так как его следует вызывать только в "
"случае обнаружения неправильной конфигурации."

#. type: Title ==
#: documentation/content/en/articles/rc-scripting/_index.adoc:727
#, no-wrap
msgid "Giving more flexibility to an rc.d script"
msgstr "Придание большей гибкости скрипту rc.d"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:736
msgid ""
"When invoked during startup or shutdown, an [.filename]#rc.d# script is "
"supposed to act on the entire subsystem it is responsible for.  E.g., [."
"filename]#/etc/rc.d/netif# should start or stop all network interfaces "
"described by man:rc.conf[5].  Either task can be uniquely indicated by a "
"single command argument such as `start` or `stop`.  Between startup and "
"shutdown, [.filename]#rc.d# 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 man:rc.conf[5] 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# script calls for an extra argument, the "
"interface name."
msgstr ""
"При вызове во время запуска или завершения работы скрипт [.filename]#rc.d# "
"должен воздействовать на всю подсистему, за которую он отвечает. Например, [."
"filename]#/etc/rc.d/netif# должен запускать или останавливать все сетевые "
"интерфейсы, описанные в man:rc.conf[5]. Любая из этих задач может быть "
"однозначно указана единственным аргументом команды, таким как `start` или "
"`stop`. Между запуском и завершением работы скрипты [.filename]#rc.d# "
"помогают администратору управлять работающей системой, и именно тогда "
"возникает потребность в большей гибкости и точности. Например, администратор "
"может добавить настройки нового сетевого интерфейса в man:rc.conf[5], а "
"затем запустить его, не затрагивая работу существующих интерфейсов. В "
"следующий раз администратору может потребоваться остановить отдельный "
"сетевой интерфейс. В духе командной строки, соответствующий скрипт [."
"filename]#rc.d# требует дополнительного аргумента — имени интерфейса."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:739
msgid ""
"Fortunately, man:rc.subr[8] 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."
msgstr ""
"К счастью, man:rc.subr[8] позволяет передавать любое количество аргументов "
"(в пределах системных ограничений) методам скрипта. Благодаря этому "
"изменения в самом скрипте могут быть минимальными."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:744
msgid ""
"How can man:rc.subr[8] gain access to the extra command-line arguments.  "
"Should it just grab them directly? Not by any means.  Firstly, an man:sh[1] "
"function has no access to the positional parameters of its caller, but man:"
"rc.subr[8] is just a sack of such functions.  Secondly, the good manner of [."
"filename]#rc.d# dictates that it is for the main script to decide which "
"arguments are to be passed to its methods."
msgstr ""
"Как man:rc.subr[8] может получить доступ к дополнительным аргументам "
"командной строки. Должен ли он просто захватывать их напрямую? Ни в коем "
"случае. Во-первых, функция man:sh[1] не имеет доступа к позиционным "
"параметрам своего вызывающего объекта, но man:rc.subr[8] — это просто набор "
"таких функций. Во-вторых, хороший стиль [.filename]#rc.d# предписывает, что "
"именно главный скрипт должен решать, какие аргументы передавать его методам."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:748
msgid ""
"So the approach adopted by man:rc.subr[8] is as follows: `run_rc_command` "
"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: "
"`start`, `stop`, etc.  It will be shifted out by `run_rc_command`, so what "
"is `$2` in the original command line will be presented as `$1` to the "
"method, and so on."
msgstr ""
"Итак, подход, принятый в man:rc.subr[8], следующий: `run_rc_command` "
"передаёт все свои аргументы, кроме первого, в соответствующий метод в "
"неизменном виде. Первый, опущенный аргумент — это имя самого метода: "
"`start`, `stop` и т.д. Он будет удалён с помощью `shift` в `run_rc_command`, "
"так что то, что было `$2` в оригинальной командной строке, будет "
"представлено как `$1` в методе, и так далее."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:751
msgid ""
"To illustrate this opportunity, let us modify the primitive dummy script so "
"that its messages depend on the additional arguments supplied.  Here we go:"
msgstr ""
"Чтобы проиллюстрировать эту возможность, давайте изменим примитивный скрипт-"
"заглушку так, чтобы его сообщения зависели от дополнительных переданных "
"аргументов. Вот как это выглядит:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:763
#, no-wrap
msgid ""
"name=\"dummy\"\n"
"start_cmd=\"${name}_start\"\n"
"stop_cmd=\":\"\n"
"kiss_cmd=\"${name}_kiss\"\n"
"extra_commands=\"kiss\"\n"
msgstr ""
"name=\"dummy\"\n"
"start_cmd=\"${name}_start\"\n"
"stop_cmd=\":\"\n"
"kiss_cmd=\"${name}_kiss\"\n"
"extra_commands=\"kiss\"\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:772
#, no-wrap
msgid ""
"dummy_start()\n"
"{\n"
"        if [ $# -gt 0 ]; then <.>\n"
"                echo \"Greeting message: $*\"\n"
"        else\n"
"                echo \"Nothing started.\"\n"
"        fi\n"
"}\n"
msgstr ""
"dummy_start()\n"
"{\n"
"        if [ $# -gt 0 ]; then <.>\n"
"                echo \"Greeting message: $*\"\n"
"        else\n"
"                echo \"Nothing started.\"\n"
"        fi\n"
"}\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:788
#, no-wrap
msgid ""
"dummy_kiss()\n"
"{\n"
"        echo -n \"A ghost gives you a kiss\"\n"
"        if [ $# -gt 0 ]; then <.>\n"
"                echo -n \" and whispers: $*\"\n"
"        fi\n"
"        case \"$*\" in\n"
"        *[.!?])\n"
"                echo\n"
"                ;;\n"
"        *)\n"
"                echo .\n"
"                ;;\n"
"        esac\n"
"}\n"
msgstr ""
"dummy_kiss()\n"
"{\n"
"        echo -n \"A ghost gives you a kiss\"\n"
"        if [ $# -gt 0 ]; then <.>\n"
"                echo -n \" and whispers: $*\"\n"
"        fi\n"
"        case \"$*\" in\n"
"        *[.!?])\n"
"                echo\n"
"                ;;\n"
"        *)\n"
"                echo .\n"
"                ;;\n"
"        esac\n"
"}\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:791
#, no-wrap
msgid ""
"load_rc_config $name\n"
"run_rc_command \"$@\" <.>\n"
msgstr ""
"load_rc_config $name\n"
"run_rc_command \"$@\" <.>\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:794
msgid "What essential changes can we notice in the script?"
msgstr "Какие основные изменения мы можем заметить в скрипте?"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:799
msgid ""
"&#10122; All arguments you type after `start` 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 man:echo[1] as one string in the next line - note `$*` within the "
"double quotes.  Here is how the script can be invoked now:"
msgstr ""
"&#10122; Все аргументы, которые вы вводите после `start`, могут стать "
"позиционными параметрами для соответствующего метода. Мы можем использовать "
"их любым способом в соответствии с нашей задачей, навыками и предпочтениями. "
"В текущем примере мы просто передаем все их в man:echo[1] как одну строку в "
"следующей строке — обратите внимание на `$*` в двойных кавычках. Вот как "
"теперь можно вызывать этот скрипт:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:804
#, no-wrap
msgid ""
"# /etc/rc.d/dummy start\n"
"Nothing started.\n"
msgstr ""
"# /etc/rc.d/dummy start\n"
"Nothing started.\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:807
#, no-wrap
msgid ""
"# /etc/rc.d/dummy start Hello world!\n"
"Greeting message: Hello world!\n"
msgstr ""
"# /etc/rc.d/dummy start Hello world!\n"
"Greeting message: Hello world!\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:811
msgid ""
"&#10123; The same applies to any method our script provides, not only to a "
"standard one.  We have added a custom method named `kiss`, and it can take "
"advantage of the extra arguments not less than `start` does. E.g.:"
msgstr ""
"&#10123; То же самое относится к любому методу, который предоставляет наш "
"скрипт, не только к стандартному. Мы добавили пользовательский метод с "
"именем `kiss`, и он может использовать дополнительные аргументы не меньше, "
"чем `start`. Например:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:816
#, no-wrap
msgid ""
"# /etc/rc.d/dummy kiss\n"
"A ghost gives you a kiss.\n"
msgstr ""
"# /etc/rc.d/dummy kiss\n"
"A ghost gives you a kiss.\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:819
#, no-wrap
msgid ""
"# /etc/rc.d/dummy kiss Once I was Etaoin Shrdlu...\n"
"A ghost gives you a kiss and whispers: Once I was Etaoin Shrdlu...\n"
msgstr ""
"# /etc/rc.d/dummy kiss Once I was Etaoin Shrdlu...\n"
"A ghost gives you a kiss and whispers: Once I was Etaoin Shrdlu...\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:822
msgid ""
"&#10124; If we want just to pass all extra arguments to any method, we can "
"merely substitute `\"$@\"` for `\"$1\"` in the last line of our script, "
"where we invoke `run_rc_command`."
msgstr ""
"&#10124; Если мы хотим просто передать все дополнительные аргументы любому "
"методу, мы можем просто заменить `\"$@\"` на `\"$1\"` в последней строке "
"нашего скрипта, где мы вызываем `run_rc_command`."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:828
msgid ""
"An man:sh[1] programmer ought to understand the subtle difference between `"
"$*` and `$@` as the ways to designate all positional parameters.  For its in-"
"depth discussion, refer to a good handbook on man:sh[1] scripting.  _Do not_ "
"use the expressions until you fully understand them because their misuse "
"will result in buggy and insecure scripts."
msgstr ""
"Программист man:sh[1] должен понимать тонкую разницу между `$*` и `$@` как "
"способами обозначения всех позиционных параметров. Для детального обсуждения "
"обратитесь к хорошему руководству по написанию скриптов на man:sh[1]. _Не "
"используйте_ эти выражения, пока полностью не поймёте их, так как их "
"неправильное применение приведёт к созданию ненадёжных и небезопасных "
"скриптов."

#. type: delimited block = 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:835
msgid ""
"Currently `run_rc_command` 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 `$*` misuse."
msgstr ""
"В настоящее время в `run_rc_command` может присутствовать ошибка, которая "
"мешает ему сохранять исходные границы между аргументами. То есть аргументы с "
"встроенными пробелами могут обрабатываться некорректно. Ошибка возникает из-"
"за неправильного использования `$*`."

#. type: Title ==
#: documentation/content/en/articles/rc-scripting/_index.adoc:838
#, no-wrap
msgid "Making a script ready for Service Jails"
msgstr "Подготовка скрипта для сервисных клеток"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:841
msgid ""
"Scripts which start a long running service are suitable for service jails, "
"and should come with a suitable service jail configuration."
msgstr ""
"Скрипты, запускающие долго работающую службу, подходят для служебных клеток "
"и должны поставляться с соответствующей конфигурацией сервисной клетки."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:843
msgid ""
"Some examples of scripts which are not suitable to run in a service jail:"
msgstr ""
"Некоторые примеры скриптов, которые не подходят для запуска в сервисной "
"клетке:"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:845
msgid ""
"any script which in the start command only changes a runtime setting for "
"programs or the kernel,"
msgstr ""
"любой скрипт, который в команде start только изменяет настройки времени "
"выполнения для программ или ядра,"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:846
msgid "or tries to mount something,"
msgstr "или пытается что-то смонтировать,"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:847
msgid "or finds and deletes files"
msgstr "или находит и удаляет файлы"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:849
msgid ""
"Scripts not suitable to run in a service jail need to prevent the use within "
"service jails."
msgstr ""
"Необходимо предотвратить использование внутри сервисных клеток скриптов, не "
"предназначенных для запуска в сервисной клетке."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:851
msgid ""
"A script with a long running service which needs to do something listed "
"above before the start or after the stop, can either be split-up into two "
"scripts with dependencies, or use the precommand and postcommand parts of "
"the script to perform this action."
msgstr ""
"Скрипт с долго работающей службой, которому необходимо выполнить одно из "
"перечисленных выше действий перед запуском или после остановки, может быть "
"разделён на два скрипта с зависимостями или использовать части `precommand` "
"и `postcommand` скрипта для выполнения этого действия."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:854
msgid ""
"By default, only the start and stop parts of a script are run within a "
"service jail, the rest is run outside the jail.  As such any setting used in "
"the start/stop parts of the script can not be set from e.g. a precommand."
msgstr ""
"По умолчанию только части `start` и `stop` скрипта выполняются внутри "
"сервисной клетки, остальное выполняется вне клетки. Таким образом, любые "
"настройки, используемые в частях `start`/`stop` скрипта, не могут быть "
"заданы, например, из `precommand`."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:856
msgid ""
"To make a script ready for use with extref:{handbook}jails[Service Jails, "
"service-jails], only one more config line needs to be inserted:"
msgstr ""
"Чтобы сделать скрипт готовым к использованию с extref:{handbook}jails["
"Сервисными Клетками, service-jails], необходимо добавить всего лишь одну "
"дополнительную конфигурационную строку:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:866
#: documentation/content/en/articles/rc-scripting/_index.adoc:899
#, no-wrap
msgid ""
"name=\"dummy\"\n"
"start_cmd=\"${name}_start\"\n"
"stop_cmd=\":\"\n"
msgstr ""
"name=\"dummy\"\n"
"start_cmd=\"${name}_start\"\n"
"stop_cmd=\":\"\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:868
#, no-wrap
msgid ": ${dummy_svcj_options:=\"\"} <.>\n"
msgstr ": ${dummy_svcj_options:=\"\"} <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:873
#: documentation/content/en/articles/rc-scripting/_index.adoc:904
#, no-wrap
msgid ""
"dummy_start()\n"
"{\n"
"        echo \"Nothing started.\"\n"
"}\n"
msgstr ""
"dummy_start()\n"
"{\n"
"        echo \"Nothing started.\"\n"
"}\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:880
msgid ""
"&#10122; If it makes sense that the script runs in a jail, it must have an "
"overridable service jails configuration.  If it does not need network access "
"or access to any other resource which is restricted in jails, an empty "
"config like displayed is enough."
msgstr ""
"&#10122; Если имеет смысл, чтобы скрипт выполнялся в клетке, он должен иметь "
"переопределяемую конфигурацию сервисных клеток. Если ему не требуется доступ "
"к сети или любым другим ресурсам, которые ограничены в клетках, достаточно "
"пустой конфигурации, как показано."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:885
msgid ""
"Strictly speaking an empty config is not needed, but it explicitly describes "
"that the script is service jails ready, and that it does not need additional "
"jail permissions.  As such it is highly recommended to add such an empty "
"config in such a case.  The most common option to use is \"net_basic\", "
"which enables the use of the hosts IPv4 and IPv6 addresses.  All possible "
"options are explained in man:rc.conf[5]."
msgstr ""
"Строго говоря, пустая конфигурация не обязательна, но она явно указывает, "
"что скрипт готов к работе с сервисными клетками и не требует дополнительных "
"разрешений для клеток. Поэтому настоятельно рекомендуется добавить такую "
"пустую конфигурацию в таком случае. Наиболее распространённая опция — "
"\"net_basic\", которая позволяет использовать IPv4 и IPv6 адреса хоста. Все "
"возможные опции описаны в man:rc.conf[5]."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:887
msgid ""
"If a setting for the start/stop depends on variables from the rc-framework "
"(e.g., set inside man:rc.conf[5]), this needs to be handled by "
"``load_rc_config`` and ``run_rc_command`` instead of inside a precommand."
msgstr ""
"Если настройка запуска/остановки зависит от переменных из rc-фреймворка "
"(например, заданных в man:rc.conf[5]), это должно обрабатываться с помощью "
"``load_rc_config`` и ``run_rc_command``, а не внутри precommand."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:889
msgid ""
"If for some reason a script can not be run within a service jail, e.g., "
"because it is not possible to run or it does not make sense to run it in a "
"jail, use the following:"
msgstr ""
"Если по какой-то причине скрипт не может быть запущен внутри сервисной "
"клетки, например, потому что его невозможно запустить или нет смысла "
"запускать его в клетке, используйте следующее:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:908
#, no-wrap
msgid ""
"load_rc_config $name\n"
"dummy_svcj=\"NO\"\t\t# does not make sense to run in a svcj <.>\n"
"run_rc_command \"$1\"\n"
msgstr ""
"load_rc_config $name\n"
"dummy_svcj=\"NO\"\t\t# does not make sense to run in a svcj <.>\n"
"run_rc_command \"$1\"\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:911
msgid ""
"&#10122; The disabling needs to happen after the ``load_rc_config`` call, "
"else a man:rc.conf[5] setting may override it."
msgstr ""
"&#10122; Отключение должно происходить после вызова ``load_rc_config``, "
"иначе параметр из man:rc.conf[5] может переопределить его."

#. type: Title ==
#: documentation/content/en/articles/rc-scripting/_index.adoc:913
#, no-wrap
msgid "Advanced rc-scripting: Instancing"
msgstr "Продвинутые сценарии rc: запуск нескольких экземпляров"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:921
msgid ""
"Sometimes it is useful to run several instances of a service.  Typically you "
"want to be able to start/stop such instances independently, and you want to "
"have a separate config file for each instance.  Each instance should be "
"started at boot, survive updates, and benefit from updates."
msgstr ""
"Иногда полезно запускать несколько экземпляров службы. Обычно требуется "
"иметь возможность независимо запускать/останавливать такие экземпляры, а "
"также иметь отдельный файл конфигурации для каждого из них. Каждый экземпляр "
"должен запускаться при загрузке, после обновления каждый экземпляр должен "
"оставаться, и при этом должен обновиться."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:923
msgid "Here is an example of a rc script which supports this:"
msgstr "Вот пример rc-скрипта, который поддерживает это:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:941
#, no-wrap
msgid ""
"#\n"
"# PROVIDE: dummy\n"
"# REQUIRE: NETWORKING SERVERS\n"
"# KEYWORD: shutdown\n"
"#\n"
"# Add these following line to /etc/rc.conf.local or /etc/rc.conf\n"
"# to enable this service:\n"
"#\n"
"# dummy_enable (bool):\tSet it to YES to enable dummy on startup.\n"
"#\t\t\tDefault: NO\n"
"# dummy_user (string):\tUser account to run with.\n"
"#\t\t\tDefault: www\n"
"#\n"
msgstr ""
"#\n"
"# PROVIDE: dummy\n"
"# REQUIRE: NETWORKING SERVERS\n"
"# KEYWORD: shutdown\n"
"#\n"
"# Add these following line to /etc/rc.conf.local or /etc/rc.conf\n"
"# to enable this service:\n"
"#\n"
"# dummy_enable (bool):\tSet it to YES to enable dummy on startup.\n"
"#\t\t\tDefault: NO\n"
"# dummy_user (string):\tUser account to run with.\n"
"#\t\t\tDefault: www\n"
"#\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:954
#, no-wrap
msgid ""
"case $0 in <.>\n"
"/etc/rc*)\n"
"\t# during boot (shutdown) $0 is /etc/rc (/etc/rc.shutdown),\n"
"\t# so get the name of the script from $_file\n"
"\tname=$_file\n"
"\t;;\n"
"*)\n"
"\tname=$0\n"
"\t;;\n"
"esac\n"
msgstr ""
"case $0 in <.>\n"
"/etc/rc*)\n"
"\t# during boot (shutdown) $0 is /etc/rc (/etc/rc.shutdown),\n"
"\t# so get the name of the script from $_file\n"
"\tname=$_file\n"
"\t;;\n"
"*)\n"
"\tname=$0\n"
"\t;;\n"
"esac\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:959
#, no-wrap
msgid ""
"name=${name##*/} <.>\n"
"rcvar=\"${name}_enable\" <.>\n"
"desc=\"Short description of this service\"\n"
"command=\"/usr/local/sbin/dummy\"\n"
msgstr ""
"name=${name##*/} <.>\n"
"rcvar=\"${name}_enable\" <.>\n"
"desc=\"Short description of this service\"\n"
"command=\"/usr/local/sbin/dummy\"\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:961
#, no-wrap
msgid "load_rc_config \"$name\"\n"
msgstr "load_rc_config \"$name\"\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:965
#, no-wrap
msgid ""
"eval \"${rcvar}=\\${${rcvar}:-'NO'}\" <.>\n"
"eval \"${name}_svcj_options=\\${${name}_svcj_options:-'net_basic'}\" <.>\n"
"eval \"_dummy_user=\\${${name}_user:-'www'}\" <.>\n"
msgstr ""
"eval \"${rcvar}=\\${${rcvar}:-'NO'}\" <.>\n"
"eval \"${name}_svcj_options=\\${${name}_svcj_options:-'net_basic'}\" <.>\n"
"eval \"_dummy_user=\\${${name}_user:-'www'}\" <.>\n"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:970
#, no-wrap
msgid ""
"_dummy_configname=/usr/local/etc/${name}.cfg <.>\n"
"pidfile=/var/run/dummy/${name}.pid\n"
"required_files ${_dummy_configname}\n"
"command_args=\"-u ${_dummy_user} -c ${_dummy_configfile} -p ${pidfile}\"\n"
msgstr ""
"_dummy_configname=/usr/local/etc/${name}.cfg <.>\n"
"pidfile=/var/run/dummy/${name}.pid\n"
"required_files ${_dummy_configname}\n"
"command_args=\"-u ${_dummy_user} -c ${_dummy_configfile} -p ${pidfile}\"\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:978
msgid ""
"&#10122; and &#10123; make sure to set the name variable to the man:"
"basename[1] of the script name.  If the filename is [.filename]#/usr/local/"
"etc/rc.d/dummy#, name is set to [.filename]#dummy#.  This way changing the "
"filename of the rc script changes automatically the content of the name "
"variable."
msgstr ""
"&#10122; и &#10123; убедитесь, что переменная name установлена в значение "
"man:basename[1] имени скрипта. Если имя файла — [.filename]#/usr/local/etc/"
"rc.d/dummy#, то name будет установлено в [.filename]#dummy#. Таким образом, "
"изменение имени rc-скрипта автоматически изменит содержимое переменной name."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:981
msgid ""
"&#10124; specifies the variable name which is used in [.filename]#rc.conf# "
"to enable this service based upon the filename of this script.  In this "
"example this resolves to dummy_enable."
msgstr ""
"&#10124; указывает имя переменной, которая используется в [.filename]#rc."
"conf# для включения этой службы на основе имени файла этого скрипта. В "
"данном примере это преобразуется в dummy_enable."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:983
msgid "&#10125; makes sure the default for the _enable variable is NO."
msgstr ""
"&#10125; убеждается, что значение по умолчанию для переменной _enable "
"установлено в NO."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:986
msgid ""
"&#10126; is an example of having some defaults for service specific "
"framework variables, in this case the service jails options."
msgstr ""
"&#10126; Вот пример установки некоторых значений по умолчанию для переменных "
"фреймворка, специфичных для службы, в данном случае — опций клетки службы."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:988
msgid ""
"&#10127; and &#10128; set variables internal to the script (pay attention to "
"the underscore in front of _dummy_user to make it different from dummy_user "
"which can be set in [.filename]#rc.conf#)."
msgstr ""
"&#10127; и &#10128; устанавливают переменные, внутренние для скрипта "
"(обратите внимание на подчёркивание в начале _dummy_user, чтобы отличать её "
"от dummy_user, которая может быть задана в [.filename]#rc.conf#)."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:991
msgid ""
"The part in &#10126; is for variables which are not used inside the script "
"itself but in the rc framework.  All the variables which are used as "
"parameters somewhere in the script are assigned to a generic variable like "
"in &#10128; to make it more easy to reference them (no need to eval them at "
"each place of use)."
msgstr ""
"Часть в &#10126; предназначена для переменных, которые не используются "
"внутри самого скрипта, но используются в рамках rc. Все переменные, которые "
"используются как параметры в скрипте, присваиваются общей переменной, как в "
"&#10128;, чтобы упростить их использование (нет необходимости выполнять eval "
"при каждом обращении)."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:994
msgid ""
"This script will now behave differently if the start script has a different "
"name.  This allows to create symlinks to it:"
msgstr ""
"Этот скрипт теперь будет вести себя по-другому, если скрипт запуска имеет "
"другое имя. Это позволяет создавать символьные ссылки на него:"

#. type: delimited block . 4
#: documentation/content/en/articles/rc-scripting/_index.adoc:1000
#, no-wrap
msgid ""
"# ln -s dummy /usr/local/etc/rc.d/dummy_foo\n"
"# sysrc dummy_foo_enable=YES\n"
"# service dummy_foo start\n"
msgstr ""
"# ln -s dummy /usr/local/etc/rc.d/dummy_foo\n"
"# sysrc dummy_foo_enable=YES\n"
"# service dummy_foo start\n"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:1005
msgid ""
"The above creates an instance of the dummy service with the name dummy_foo.  "
"It does not use the config file [.filename]#/usr/local/etc/dummy.cfg# but "
"the config file [.filename]#/usr/local/etc/dummy_foo.cfg# (&#10128;), and it "
"uses the PID file [.filename]#/var/run/dummy/dummy_foo.pid# instead of [."
"filename]#/var/run/dummy/dummy.pid#."
msgstr ""
"Вышеприведённое создаёт экземпляр службы dummy с именем dummy_foo. Он "
"использует не файл конфигурации [.filename]#/usr/local/etc/dummy.cfg#, а "
"файл конфигурации [.filename]#/usr/local/etc/dummy_foo.cfg# (&#10128;), и "
"использует PID-файл [.filename]#/var/run/dummy/dummy_foo.pid# вместо [."
"filename]#/var/run/dummy/dummy.pid#."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:1012
msgid ""
"The services dummy and dummy_foo can be managed independently of each other, "
"while having the start script update itself on package update (due to the "
"symlink).  This does not update the REQUIRE line, as such there is no easy "
"way of depending on a specific instance.  To depend upon a specific instance "
"in the startup order a copy needs to be made instead of using a symlink.  "
"This prevents the automatic pick-up of changes to the start script when an "
"update is installed."
msgstr ""
"Сервисы dummy и dummy_foo могут управляться независимо друг от друга, при "
"этом скрипт запуска обновляется автоматически при обновлении пакета "
"(благодаря символьной ссылке). Это не обновляет строку REQUIRE, поэтому нет "
"простого способа зависеть от конкретного экземпляра. Чтобы зависеть от "
"конкретного экземпляра в порядке запуска, необходимо создать копию вместо "
"использования символьной ссылки. Это предотвращает автоматическое применение "
"изменений в скрипте запуска при установке обновления."

#. type: Title ==
#: documentation/content/en/articles/rc-scripting/_index.adoc:1014
#, no-wrap
msgid "Further reading"
msgstr "Дополнительная литература"

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:1018
msgid ""
"[[lukem]]http://www.mewburn.net/luke/papers/rc.d.pdf[The original article by "
"Luke Mewburn] offers a general overview of [.filename]#rc.d# and detailed "
"rationale for its design decisions.  It provides insight on the whole [."
"filename]#rc.d# framework and its place in a modern BSD operating system."
msgstr ""
"[[lukem]]http://www.mewburn.net/luke/papers/rc.d.pdf[Оригинальная статья "
"Люка Мьюберна] предлагает общий обзор [.filename]#rc.d# и подробное "
"обоснование принятых при его проектировании решений. В ней представлено "
"понимание всего фреймворка [.filename]#rc.d# и его места в современной BSD-"
"системе."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:1021
msgid ""
"[[manpages]]The manual pages man:rc[8], man:rc.subr[8], and man:rcorder[8] "
"document the [.filename]#rc.d# components in great detail.  You cannot fully "
"use the [.filename]#rc.d# power without studying the manual pages and "
"referring to them while writing your own scripts."
msgstr ""
"[[manpages]]Руководства man:rc[8], man:rc.subr[8] и man:rcorder[8] подробно "
"описывают компоненты [.filename]#rc.d#. Без изучения этих руководств и "
"обращения к ним при написании собственных скриптов невозможно в полной мере "
"использовать возможности [.filename]#rc.d#."

#. type: Plain text
#: documentation/content/en/articles/rc-scripting/_index.adoc:1025
msgid ""
"The major source of working, real-life examples is [.filename]#/etc/rc.d# in "
"a live system.  Its contents are easy and pleasant to read because most "
"rough corners are hidden deep in man:rc.subr[8].  Keep in mind though that "
"the [.filename]#/etc/rc.d# scripts were not written by angels, so they might "
"suffer from bugs and suboptimal design decisions.  Now you can improve them!"
msgstr ""
"Основным источником рабочих, жизненных примеров является [.filename]#/etc/rc."
"d# в работающей системе. Его содержимое легко и приятно читать, поскольку "
"большинство сложных моментов скрыто глубоко в man:rc.subr[8]. Однако "
"помните, что скрипты в [.filename]#/etc/rc.d# были написаны не ангелами, "
"поэтому они могут содержать ошибки и неоптимальные решения. Теперь вы можете "
"их улучшить!"