git: 7b349f0e4e - main - update translation of articles/rc-scripting to Russian
Vladlen Popolitov <[email protected]>
| Newsgroups | gmane.os.freebsd.devel.cvs.doc |
|---|---|
| Message-ID | <[email protected]> |
The branch main has been updated by vladlen: URL: https://cgit.FreeBSD.org/doc/commit/?id=7b349f0e4eed7bbcb75fd1048e4d242695824ef5 commit 7b349f0e4eed7bbcb75fd1048e4d242695824ef5 Author: Vladlen Popolitov <[email protected]> AuthorDate: 2025-10-20 08:21:43 +0000 Commit: Vladlen Popolitov <[email protected]> CommitDate: 2025-10-20 08:21:43 +0000 update translation of articles/rc-scripting to Russian Reviewed by: andy, eugen, maxim Differential Revision: https://reviews.freebsd.org/D51968 --- .../content/ru/articles/rc-scripting/_index.adoc | 775 ++++++ .../content/ru/articles/rc-scripting/_index.po | 2771 ++++++++++++++++++++ 2 files changed, 3546 insertions(+) diff --git a/documentation/content/ru/articles/rc-scripting/_index.adoc b/documentation/content/ru/articles/rc-scripting/_index.adoc new file mode 100644 index 0000000000..0f34f38d22 --- /dev/null +++ b/documentation/content/ru/articles/rc-scripting/_index.adoc @@ -0,0 +1,775 @@ +--- +authors: + - + author: 'Yar Tikhiy' + email: [email protected] +copyright: '2005-2006, 2012 The FreeBSD Project' +description: 'Ð ÑководÑÑво по напиÑÐ°Ð½Ð¸Ñ Ð½Ð¾Ð²ÑÑ rc.d-ÑкÑипÑов и Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ñже ÑÑÑеÑÑвÑÑÑÐ¸Ñ ' +tags: ["rc.d", "scripting", "guide", "tutorial", "FreeBSD"] +title: 'ÐÑакÑиÑеÑкое ÑÑководÑÑво по напиÑÐ°Ð½Ð¸Ñ rc.d ÑкÑипÑов в BSD' +trademarks: ["freebsd", "netbsd", "general"] +--- + += ÐÑакÑиÑеÑкое ÑÑководÑÑво по напиÑÐ°Ð½Ð¸Ñ rc.d ÑкÑипÑов в BSD +:doctype: article +:toc: macro +:toclevels: 1 +:icons: font +:sectnums: +:sectnumlevels: 6 +:source-highlighter: rouge +:experimental: +:images-path: articles/rc-scripting/ + +ifdef::env-beastie[] +ifdef::backend-html5[] +include::shared/authors.adoc[] +include::shared/mirrors.adoc[] +include::shared/releases.adoc[] +include::shared/attributes/attributes-{{% lang %}}.adoc[] +include::shared/{{% lang %}}/teams.adoc[] +include::shared/{{% lang %}}/mailing-lists.adoc[] +include::shared/{{% lang %}}/urls.adoc[] +:imagesdir: ../../../images/{images-path} +endif::[] +ifdef::backend-pdf,backend-epub3[] +include::../../../../shared/asciidoctor.adoc[] +endif::[] +endif::[] + +ifndef::env-beastie[] +include::../../../../../shared/asciidoctor.adoc[] +endif::[] + +[.abstract-title] +ÐнноÑаÑÐ¸Ñ + +ÐовиÑкам Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñложно ÑооÑнеÑÑи ÑакÑÑ Ð¸Ð· оÑиÑиалÑной докÑменÑаÑии по ÑÑеймвоÑÐºÑ [.filename]#rc.d# в BSD Ñ Ð¿ÑакÑиÑеÑкими задаÑами напиÑÐ°Ð½Ð¸Ñ ÑкÑипÑов Ð´Ð»Ñ [.filename]#rc.d#. Ð ÑÑой ÑÑаÑÑе Ð¼Ñ ÑаÑÑмоÑÑим неÑколÑко ÑипиÑнÑÑ ÑлÑÑаев возÑаÑÑаÑÑей ÑложноÑÑи, покажем возможноÑÑи [.filename]#rc.d#, Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑие Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлÑÑаÑ, и обÑÑдим, как они ÑабоÑаÑÑ. Такое ÑаÑÑмоÑÑение должно даÑÑ Ð¾ÑиенÑиÑÑ Ð´Ð»Ñ Ð´Ð°Ð»ÑнейÑего изÑÑÐµÐ½Ð¸Ñ ÑÑÑÑойÑÑва и ÑÑÑекÑивного пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ [.filename]#rc.d#. + +''' + +toc::[] + +[[rcng-intro]] +== Ðведение + +ÐÑÑоÑиÑеÑки в BSD бÑл монолиÑнÑй ÑÑаÑÑовÑй ÑÑенаÑий [.filename]#/etc/rc#. Ðн вÑзÑвалÑÑ man:init[8] во вÑÐµÐ¼Ñ Ð·Ð°Ð³ÑÑзки ÑиÑÑÐµÐ¼Ñ Ð¸ вÑполнÑл вÑе задаÑи полÑзоваÑелÑÑкого пÑоÑÑÑанÑÑва, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð¿Ð¾Ð»ÑзоваÑелÑÑкого Ñежима: пÑовеÑÐºÑ Ð¸ монÑиÑование ÑайловÑÑ ÑиÑÑем, наÑÑÑÐ¾Ð¹ÐºÑ ÑеÑи, запÑÑк демонов и Ñак далее. ТоÑнÑй ÑпиÑок Ð·Ð°Ð´Ð°Ñ Ð½Ðµ бÑл одинаковÑм в каждой ÑиÑÑеме; админиÑÑÑаÑоÑам ÑÑебовалоÑÑ ÐµÐ³Ð¾ наÑÑÑаиваÑÑ. Ðа Ñедкими иÑклÑÑениÑми, [.filename]#/etc/rc# пÑÐ¸Ñ Ð¾Ð´Ð¸Ð»Ð¾ÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ, и наÑÑоÑÑим Ñ Ð°ÐºÐµÑам ÑÑо нÑавилоÑÑ. + +ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¿Ñоблема монолиÑного Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð° заклÑÑалаÑÑ Ð² Ñом, ÑÑо он не пÑедоÑÑавлÑл конÑÑÐ¾Ð»Ñ Ð½Ð°Ð´ оÑделÑнÑми компоненÑами, запÑÑкаемÑми из [.filename]#/etc/rc#. ÐапÑимеÑ, [.filename]#/etc/rc# не мог пеÑезапÑÑÑиÑÑ Ð¾ÑделÑнÑй демон. ÐдминиÑÑÑаÑоÑÑ ÑиÑÑÐµÐ¼Ñ Ð¿ÑÐ¸Ñ Ð¾Ð´Ð¸Ð»Ð¾ÑÑ Ð²ÑÑÑнÑÑ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑ Ð¿ÑоÑеÑÑ Ð´ÐµÐ¼Ð¾Ð½Ð°, завеÑÑаÑÑ ÐµÐ³Ð¾, ждаÑÑ, пока он дейÑÑвиÑелÑно завеÑÑиÑÑÑ, заÑем иÑкаÑÑ Ð² [.filename]#/etc/rc# нÑжнÑе Ñлаги и, наконеÑ, вводиÑÑ Ð¿Ð¾Ð»Ð½ÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½ÑÑ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ Ð¿Ð¾Ð²ÑоÑного запÑÑ ÐºÐ° демона. ÐадаÑа ÑÑановилаÑÑ ÐµÑÑ Ñложнее и более подвеÑженной оÑибкам, еÑли ÑлÑжба ÑоÑÑоÑла из неÑколÑÐºÐ¸Ñ Ð´ÐµÐ¼Ð¾Ð½Ð¾Ð² или ÑÑебовала дополниÑелÑнÑÑ Ð´ÐµÐ¹ÑÑвий. Ðдним Ñловом, единÑй ÑкÑÐ¸Ð¿Ñ Ð½Ðµ ÑпÑавлÑлÑÑ Ñ Ñем, Ð´Ð»Ñ Ñего ÑкÑипÑÑ Ð²Ð¾Ð¾Ð±Ñе пÑедназнаÑенÑ: облегÑаÑÑ Ð¶Ð¸Ð·Ð½Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑÑ ÑиÑÑемÑ. + +Ðозже бÑла пÑедпÑинÑÑа попÑÑка ÑазделиÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑаÑÑи [.filename]#/etc/rc# Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи оÑделÑного запÑÑка наиболее важнÑÑ Ð¿Ð¾Ð´ÑиÑÑем. ÐзвеÑÑнÑм пÑимеÑом ÑÑал [.filename]#/etc/netstart#, пÑедназнаÑеннÑй Ð´Ð»Ñ Ð½Ð°ÑÑÑойки ÑеÑи. ÐÑо позволÑло полÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑеÑи в однополÑзоваÑелÑÑком Ñежиме, но Ð¿Ð»Ð¾Ñ Ð¾ инÑегÑиÑовалоÑÑ Ð² авÑомаÑиÑеÑкий пÑоÑеÑÑ Ð·Ð°Ð¿ÑÑка, Ñак как ÑаÑÑи его кода ÑÑебовалоÑÑ Ð¿ÐµÑеплеÑаÑÑÑÑ Ñ Ð´ÐµÐ¹ÑÑвиÑми, по ÑÑÑи не ÑвÑзаннÑми Ñ ÑеÑÑÑ. Ðмен но поÑÑÐ¾Ð¼Ñ [.filename]#/etc/netstart# пÑевÑаÑилÑÑ Ð² [.filename]#/etc/rc.network#. ÐоÑледний болÑÑе не бÑл обÑÑнÑм ÑкÑипÑом; он ÑоÑÑоÑÐ » из болÑÑÐ¸Ñ , запÑÑаннÑÑ ÑÑнкÑий man:sh[1], вÑзÑваемÑÑ Ð¸Ð· [.filename]#/etc/rc# на ÑазнÑÑ ÑÑÐ°Ð¿Ð°Ñ Ð·Ð°Ð³ÑÑзки ÑиÑÑемÑ. Ðднако по меÑе Ñого, как задаÑи пÑи запÑÑке ÑÑановилиÑÑ ÑазнообÑазнее и Ñложнее, "квазимодÑлÑнÑй" Ð¿Ð¾Ð´Ñ Ð¾Ð´ ÑÑал еÑÑ Ð±Ð¾Ð»ÑÑей обÑзой, Ñем монолиÑнÑй [.filename]#/etc/rc#. + +Ðез ÑиÑÑого и Ñ Ð¾ÑоÑо пÑодÑманного каÑкаÑа, ÑÑаÑÑовÑе ÑкÑипÑÑ Ð²ÑнÑÐ¶Ð´ÐµÐ½Ñ Ð±Ñли идÑи на вÑевозможнÑе ÑÑ Ð¸ÑÑениÑ, ÑÑÐ¾Ð±Ñ ÑдовлеÑвоÑиÑÑ Ð¿Ð¾ÑÑебноÑÑи бÑÑÑÑо ÑазвиваÑÑÐ¸Ñ ÑÑ BSD-оÑиенÑиÑованнÑÑ Ð¾Ð¿ÐµÑаÑионнÑÑ ÑиÑÑем. РконÑе конÑов ÑÑало оÑевидно, ÑÑо Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе Ñаги на пÑÑи к деÑализиÑованной и ÑаÑÑиÑÑемой ÑиÑÑеме [.filename]#rc#. Так поÑвилаÑÑ BSD [.filename]#rc.d#. ÐÑ Ð¿ÑизнаннÑми ÑоздаÑелÑми ÑÑали ÐÑк ÐÑÑбеÑн и ÑообÑеÑÑво NetBSD. Ðозже она бÑла и мпоÑÑиÑована в FreeBSD. ÐÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ оÑÑÑÐ»Ð°ÐµÑ Ðº ÑаÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑиÑÑемнÑÑ ÑкÑипÑов Ð´Ð»Ñ Ð¾ÑделÑнÑÑ ÑлÑжб, коÑоÑое Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² [.filename]#/etc/rc.d#. ÐÑкоÑе Ð¼Ñ Ñзнаем болÑÑе о компоненÑÐ°Ñ ÑиÑÑÐµÐ¼Ñ [.filename]#rc.d# и Ñвидим, как вÑзÑваÑÑÑÑ Ð¾ÑделÑнÑе ÑкÑипÑÑ. + +ÐÑновнÑе идеи, лежаÑие в оÑнове 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#, поÑколÑÐºÑ Ð¿ÑавилÑнÑй поÑÑдок завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ Ð¿ÑоÑивоположен поÑÑÐ´ÐºÑ Ð·Ð°Ð¿ÑÑка. + +Ðизайн BSD [.filename]#rc.d# опиÑан в crossref:rc-scripting[lukem, оÑигиналÑной ÑÑаÑÑе ÐÑка ÐÑÑбеÑна], а компоненÑÑ [.filename]#rc.d# подÑобно докÑменÑиÑÐ¾Ð²Ð°Ð½Ñ Ð² crossref:rc-scripting[manpages, ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ ÑÑководÑÑÐ²Ð°Ñ ]. Ðднако новиÑÐºÑ Ð² [.filename]#rc.d# Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ¾Ñевидно, как ÑвÑзаÑÑ Ð¼Ð½Ð¾Ð³Ð¾ÑиÑленнÑе ÑлеменÑÑ Ð²Ð¼ÐµÑÑе, ÑÑÐ¾Ð±Ñ ÑоздаÑÑ Ñ Ð¾ÑоÑо ÑÑÑÑкÑÑÑиÑованнÑй ÑкÑÐ¸Ð¿Ñ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑной задаÑи. ÐоÑÑÐ¾Ð¼Ñ Ð² ÑÑой ÑÑаÑÑе бÑÐ´ÐµÑ Ð¿ÑедпÑинÑÑа попÑÑка опиÑаÑÑ [.filename]#rc.d# Ñ Ð´ÑÑгого ÑакÑÑÑа. Рней б ÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾, какие ÑÑнкÑии ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð² ÑÑде ÑипиÑнÑÑ ÑлÑÑаев и поÑемÑ. ÐбÑаÑиÑе внимание, ÑÑо Ñ Ñо не ÑÑководÑÑво, поÑколÑÐºÑ Ð½Ð°Ñа ÑÐµÐ»Ñ â не пÑедоÑÑавление гоÑовÑÑ ÑеÑепÑов, а демонÑÑÑаÑÐ¸Ñ Ð½ÐµÑколÑÐºÐ¸Ñ Ð¿ÑоÑÑÑÑ ÑпоÑобов Ð²Ñ Ð¾Ð´Ð° в Ð¼Ð¸Ñ [.filename]#rc.d#. Также ÑÑа ÑÑаÑÑÑ Ð½Ðµ заменÑÐµÑ ÑооÑвеÑÑÑвÑÑÑие ÑÑководÑÑва. Ðе ÑÑеÑнÑйÑеÑÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº ним Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ ÑоÑмалÑной и полной докÑменÑаÑии во вÑÐµÐ¼Ñ ÑÑÐµÐ½Ð¸Ñ ÑÑой ÑÑаÑÑи. + +ÐÐ»Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ ÑÑой ÑÑаÑÑи еÑÑÑ Ð¿ÑедваÑиÑелÑнÑе ÑÑебованиÑ. ÐÑежде вÑего, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð·Ð½Ð°ÐºÐ¾Ð¼Ñ Ñ ÑзÑком напиÑÐ°Ð½Ð¸Ñ ÑÑенаÑиев man:sh[1], ÑÑÐ¾Ð±Ñ Ð¾ÑвоиÑÑ [.filename]#rc.d#. ÐÑоме Ñого, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð½Ð°ÑÑ, как ÑиÑÑема вÑполнÑÐµÑ Ð·Ð°Ð´Ð°Ñи запÑÑка и завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого пÑоÑÑÑанÑÑва, ÑÑо опиÑано в man:rc[8]. + +ÐÑа ÑÑаÑÑÑ Ð¿Ð¾ÑвÑÑена веÑке FreeBSD в [.filename]#rc.d#. Тем не менее, она Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð° и ÑазÑабоÑÑикам NetBSD, поÑÐ¾Ð¼Ñ ÑÑо две веÑки BSD [.filename]#rc.d# не ÑолÑко ÑазделÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñй дизайн, но и оÑÑаÑÑÑÑ ÑÑ Ð¾Ð¶Ð¸Ð¼Ð¸ в аÑпекÑÐ°Ñ , видимÑÑ Ð°Ð²ÑоÑам ÑкÑипÑов. + +[[rcng-task]] +== ÐбÑиÑовка задаÑи + +Ðемного ÑазмÑÑлений пеÑед запÑÑком `$EDITOR` не повÑедиÑ. ЧÑÐ¾Ð±Ñ Ð½Ð°Ð¿Ð¸ÑаÑÑ Ñ Ð¾ÑоÑо пÑодÑманнÑй ÑкÑÐ¸Ð¿Ñ [.filename]#rc.d# Ð´Ð»Ñ ÑиÑÑемной ÑлÑжбÑ, ÑнаÑала нÑжно оÑвеÑиÑÑ Ð½Ð° ÑледÑÑÑие вопÑоÑÑ: + +* ЯвлÑеÑÑÑ Ð»Ð¸ ÑлÑжба обÑзаÑелÑной или опÑионалÑной? +* ÐÑÐ´ÐµÑ Ð»Ð¸ ÑкÑÐ¸Ð¿Ñ Ð¾Ð±ÑлÑживаÑÑ Ð¾Ð´Ð½Ñ Ð¿ÑогÑаммÑ, напÑимеÑ, демон, или вÑполнÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑложнÑе дейÑÑвиÑ? +* ÐÑ ÐºÐ°ÐºÐ¸Ñ Ð´ÑÑÐ³Ð¸Ñ ÑлÑжб завиÑÐ¸Ñ Ð½Ð°Ñа ÑлÑжба, и наобоÑоÑ? + +Ðз ÑледÑÑÑÐ¸Ñ Ð¿ÑимеÑов Ð¼Ñ Ñвидим, поÑÐµÐ¼Ñ Ð²Ð°Ð¶Ð½Ð¾ знаÑÑ Ð¾ÑвеÑÑ Ð½Ð° ÑÑи вопÑоÑÑ. + +[[rcng-dummy]] +== ÐÑимиÑивнÑй ÑкÑÐ¸Ð¿Ñ + +СледÑÑÑий ÑкÑÐ¸Ð¿Ñ Ð¿ÑоÑÑо вÑÐ²Ð¾Ð´Ð¸Ñ ÑообÑение каждÑй Ñаз пÑи загÑÑзке ÑиÑÑемÑ: + +[.programlisting] +.... +#!/bin/sh <.> + +. /etc/rc.subr <.> + +name="dummy" <.> +start_cmd="${name}_start" <.> +stop_cmd=":" <.> + +dummy_start() <.> +{ + echo "Nothing started." +} + +load_rc_config $name <.> +run_rc_command "$1" <.> +.... + +ÐÐ¾Ñ ÑÑо ÑледÑÐµÑ ÑÑиÑÑваÑÑ: + +➊ ÐнÑеÑпÑеÑиÑÑемÑй ÑкÑÐ¸Ð¿Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ наÑинаÑÑÑÑ Ñ "волÑебной" ÑÑÑоки shebang. ÐÑа ÑÑÑока ÑказÑÐ²Ð°ÐµÑ Ð¿ÑогÑаммÑ-инÑеÑпÑеÑаÑÐ¾Ñ Ð´Ð»Ñ ÑкÑипÑа. ÐлагодаÑÑ ÑÑÑоке shebang ÑкÑÐ¸Ð¿Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð¿ÑÑен ÑоÑно Ñак же, как бинаÑÐ½Ð°Ñ Ð¿ÑогÑамма, пÑи ÑÑловии ÑÑо Ñ Ð½ÐµÐ³Ð¾ ÑÑÑановлен Ð±Ð¸Ñ Ð²ÑполнениÑ. (См. man:chmod[1].) ÐапÑимеÑ, ÑиÑÑемнÑй админиÑÑÑаÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¿ÑÑÑиÑÑ Ð½Ð°Ñ ÑкÑÐ¸Ð¿Ñ Ð²ÑÑÑнÑÑ Ð¸Ð· командной ÑÑÑоки: + +[source, shell] +.... +# /etc/rc.d/dummy start +.... + +[NOTE] +==== +ÐÐ»Ñ ÐºÐ¾ÑÑекÑного ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ [.filename]#rc.d# ÑкÑипÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ñ Ð½Ð° ÑзÑке man:sh[1]. ÐÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ ÑлÑжба или поÑÑ, коÑоÑÑй иÑполÑзÑÐµÑ Ð´Ð²Ð¾Ð¸ÑнÑÑ ÑÑилиÑÑ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ пÑоÑедÑÑÑ Ð·Ð°Ð¿ÑÑка, напиÑаннÑÑ Ð½Ð° дÑÑгом ÑзÑке, ÑÑÑановиÑе ÑÑÐ¾Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð² [.filename]#/usr/sbin# (Ð´Ð»Ñ ÑиÑÑемÑ) или [.filename]#/usr/local/sbin# (Ð´Ð»Ñ Ð¿Ð¾ÑÑов) и вÑзовиÑе его из man:sh[1] ÑкÑипÑа в ÑооÑвеÑÑÑвÑÑÑем каÑалоге [.filename]#rc.d#. +==== + +[TIP] +==== +ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе ÑзнаÑÑ Ð¿Ð¾Ð´ÑобноÑÑи о Ñом, поÑÐµÐ¼Ñ ÑкÑипÑÑ [.filename]#rc.d# Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ñ Ð½Ð° ÑзÑке man:sh[1], изÑÑиÑе, как [.filename]#/etc/rc# вÑзÑÐ²Ð°ÐµÑ Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `run_rc_script`, а заÑем изÑÑиÑе ÑеализаÑÐ¸Ñ `run_rc_script` в [.filename]#/etc/rc.subr#. +==== + +➋ Ð Ñайле [.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#. ÐÑ Ð½Ðµ бÑдем иÑклÑÑением. + +Файл [.filename]#rc.d# должен "подгÑÑзиÑÑ" ([.filename]#/etc/rc.subr#, вклÑÑиÑÑ ÐµÐ³Ð¾ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ "`.`") _до_ вÑзова ÑÑнкÑий man:rc.subr[8], ÑÑÐ¾Ð±Ñ Ñ man:sh[1] бÑла возможноÑÑÑ Ð·Ð½Ð°ÑÑ Ð¾Ð± ÑÑÐ¸Ñ ÑÑнкÑиÑÑ Ð·Ð°Ñанее. ÐÑедпоÑÑиÑелÑнÑй ÑÑÐ¸Ð»Ñ â подгÑÑжаÑÑ [.filename]#/etc/rc.subr# в Ñамом наÑале. + +[NOTE] +==== +ÐекоÑоÑÑе полезнÑе ÑÑнкÑии, ÑвÑзаннÑе Ñ ÑеÑÑÑ, пÑедоÑÑавлÑÑÑÑÑ Ð´ÑÑгим вклÑÑаемÑм Ñайлом â [.filename]#/etc/network.subr#. +==== + +➌ [[name-var]]ÐбÑзаÑелÑÐ½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ `name` опÑеделÑÐµÑ Ð¸Ð¼Ñ Ð½Ð°Ñего ÑкÑипÑа. Ðна ÑÑебÑеÑÑÑ man:rc.subr[8]. То еÑÑÑ, каждÑй ÑкÑÐ¸Ð¿Ñ Ð² [.filename]#rc.d# _должен_ ÑÑÑановиÑÑ `name` пеÑед вÑзовом ÑÑнкÑий man:rc.subr[8]. + +ТепеÑÑ Ñамое вÑÐµÐ¼Ñ Ñаз и навÑегда вÑбÑаÑÑ ÑникалÑное Ð¸Ð¼Ñ Ð´Ð»Ñ Ð½Ð°Ñего ÑкÑипÑа. ÐÑ Ð±Ñдем иÑполÑзоваÑÑ ÐµÐ³Ð¾ в неÑколÑÐºÐ¸Ñ Ð¼ÐµÑÑÐ°Ñ Ð¿Ñи ÑазÑабоÑке ÑкÑипÑа. СодеÑжимое пеÑеменной name должно ÑооÑвеÑÑÑвоваÑÑ Ð¸Ð¼ÐµÐ½Ð¸ ÑкÑипÑа, Ñак как некоÑоÑÑе ÑаÑÑи FreeBSD (напÑимеÑ, crossref:rc-scripting[rcng-service-jails, ÑеÑвиÑнÑе клеÑки (jail)] и ÑÑнкÑÐ¸Ñ cpuset в rc framework) завиÑÑÑ Ð¾Ñ ÑÑого. Таким обÑазом, Ð¸Ð¼Ñ Ñайла Ñакже не должно ÑодеÑжаÑÑ Ñимволов, коÑоÑÑе могÑÑ Ð²ÑзваÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð² ÑкÑÐ¸Ð¿Ñ Ð°Ñ (напÑимеÑ, не иÑполÑзÑйÑе деÑÐ¸Ñ "-" и дÑÑгие). + +[NOTE] +==== +ТекÑÑий ÑÑÐ¸Ð»Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÑкÑипÑов в [.filename]#rc.d# заклÑÑаеÑÑÑ Ð² заклÑÑении знаÑений, пÑиÑваиваемÑÑ Ð¿ÐµÑеменнÑм, в двойнÑе кавÑÑки. ÐмейÑе в видÑ, ÑÑо ÑÑо вÑего лиÑÑ Ð²Ð¾Ð¿ÑÐ¾Ñ ÑÑилÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ вÑегда пÑименим. ÐÑ Ð¼Ð¾Ð¶ÐµÑе безопаÑно опÑÑÑиÑÑ ÐºÐ°Ð²ÑÑки вокÑÑг пÑоÑÑÑÑ Ñлов без меÑаÑимволов man:sh[1], Ñогда как в некоÑоÑÑÑ ÑлÑÑаÑÑ Ð²Ð°Ð¼ понадобÑÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÑнÑе кавÑÑки, ÑÑÐ¾Ð±Ñ Ð¿ÑедоÑвÑаÑиÑÑ Ð¸Ð½ÑеÑпÑеÑаÑÐ¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ man:sh[1]. ÐÑогÑаммиÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑмеÑÑ Ð¾Ñ Ð»Ð¸ÑаÑÑ ÑинÑакÑÐ¸Ñ ÑзÑка Ð¾Ñ ÑÑилевÑÑ ÑоглаÑений и ÑазÑмно иÑполÑзоваÑÑ Ð¸ Ñо, и дÑÑгое. +==== + +➍ ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¸Ð´ÐµÑ 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] пÑедоÑÑÐ°Ð²Ð»Ñ ÐµÑ ÑÑандаÑÑнÑе меÑÐ¾Ð´Ñ Ð´Ð»Ñ ÑиповÑÑ Ð°ÑгÑменÑов. + +[NOTE] +==== +ЧÑÐ¾Ð±Ñ ÑделаÑÑ ÐºÐ¾Ð´ в [.filename]#rc.d# более единообÑазнÑм, обÑÑно иÑполÑзÑÑÑ `${name}` везде, где ÑÑо ÑмеÑÑно. Таким обÑазом, множеÑÑво ÑÑÑок можно пÑоÑÑо копиÑоваÑÑ Ð¸Ð· одного ÑкÑипÑа в дÑÑгой. +==== + +➎ СледÑÐµÑ Ð¿Ð¾Ð¼Ð½Ð¸ÑÑ, ÑÑо man:rc.subr[8] пÑедоÑÑавлÑÐµÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ ÑÑандаÑÑнÑÑ Ð°ÑгÑменÑов. СледоваÑелÑно, еÑли Ð¼Ñ Ñ Ð¾Ñим, ÑÑÐ¾Ð±Ñ ÑÑандаÑÑнÑй меÑод ниÑего не делал, Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÐµÑеопÑеделиÑÑ ÐµÐ³Ð¾ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ no-op man:sh[1] вÑÑажениÑ. + +➏ Тело Ñложного меÑода Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñеализовано в виде ÑÑнкÑии. ХоÑоÑей пÑакÑикой ÑвлÑеÑÑÑ Ð¸ÑполÑзование оÑмÑÑленного имени ÑÑнкÑии. + +[IMPORTANT] +==== +ÐаÑÑоÑÑелÑно ÑекомендÑеÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð¿ÑеÑÐ¸ÐºÑ `${name}` к именам вÑÐµÑ ÑÑнкÑий, опÑеделеннÑÑ Ð² наÑем ÑкÑипÑе, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ никогда не конÑликÑовали Ñ ÑÑнкÑиÑми из man:rc.subr[8] или дÑÑгого обÑего вклÑÑаемого Ñайла. +==== + +➐ ÐÑÐ¾Ñ Ð²Ñзов man:rc.subr[8] загÑÑÐ¶Ð°ÐµÑ Ð¿ÐµÑеменнÑе man:rc.conf[5]. ÐÐ°Ñ ÑкÑÐ¸Ð¿Ñ Ð¿Ð¾ÐºÐ° Ð¸Ñ Ð½Ðµ иÑполÑзÑеÑ, но вÑÑ Ñавно ÑекомендÑеÑÑÑ Ð·Ð°Ð³ÑÑжаÑÑ man:rc.conf[5], поÑÐ¾Ð¼Ñ ÑÑо могÑÑ Ð±ÑÑÑ Ð¿ÐµÑеменнÑе man:rc.conf[5], ÑпÑавлÑÑÑие Ñамим man:rc.subr[8]. + +➑ ÐбÑÑно ÑÑо поÑледнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° в ÑкÑипÑе [.filename]#rc.d#. Ðна вÑзÑÐ²Ð°ÐµÑ Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ man:rc.subr[8] Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑенного дейÑÑвиÑ, иÑполÑзÑÑ Ð¿ÐµÑеменнÑе и меÑодÑ, пÑедоÑÑавленнÑе наÑим ÑкÑипÑом. + +[[rcng-confdummy]] +== ÐаÑÑÑаиваемÑй ÑикÑивнÑй ÑкÑÐ¸Ð¿Ñ + +ТепеÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ð¼ некоÑоÑÑе ÑлеменÑÑ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² Ð½Ð°Ñ ÑеÑÑовÑй ÑкÑипÑ. Ðак вам Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð²ÐµÑÑно, ÑкÑипÑÑ [.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# Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð¿ÐµÑ ÐµÐ¼ÐµÐ½Ð½Ñе конÑигÑÑаÑии. Ðднако Ð¼Ñ ÑеализÑем обе возможноÑÑи в одном ÑкÑипÑе: + +[.programlisting] +.... +#!/bin/sh + +. /etc/rc.subr + +name=dummy +rcvar=dummy_enable <.> + +start_cmd="${name}_start" +stop_cmd=":" + +load_rc_config $name <.> +: ${dummy_enable:=no} <.> +: ${dummy_msg="Nothing started."} <.> + +dummy_start() +{ + echo "$dummy_msg" <.> +} + +run_rc_command "$1" +.... + +ЧÑо изменилоÑÑ Ð² ÑÑом пÑимеÑе? + +➊ ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ `rcvar` опÑеделÑÐµÑ Ð¸Ð¼Ñ Ð¿ÐµÑеменной-пеÑеклÑÑаÑÐµÐ»Ñ ON/OFF. + +➋ ТепеÑÑ `load_rc_config` вÑзÑваеÑÑÑ ÑанÑÑе в ÑкÑипÑе, до обÑаÑÐµÐ½Ð¸Ñ Ðº лÑбÑм пеÑеменнÑм man:rc.conf[5]. + +[NOTE] +==== +ÐÑи изÑÑении ÑкÑипÑов в [.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`. +==== + +➌ `run_rc_command` вÑдаÑÑ Ð¿ÑедÑпÑеждение, еÑли пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ `rcvar` ÑÑÑановлена, но ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¿ÐµÑеменнаÑ-Ñлаг не задана. ÐÑли Ð²Ð°Ñ ÑкÑÐ¸Ð¿Ñ [.filename]#rc.d# пÑедназнаÑен Ð´Ð»Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð¹ ÑиÑÑемÑ, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ñлага в [.filename]#/etc/defaults/rc.conf# и задокÑменÑиÑоваÑÑ ÐµÐ³Ð¾ в man:rc.conf[5]. РпÑоÑивном ÑлÑÑае Ð²Ð°Ñ ÑкÑÐ¸Ð¿Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ пÑедоÑÑавиÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ñлага. ÐанониÑеÑкий Ð¿Ð¾Ð´Ñ Ð¾Ð´ Ð´Ð»Ñ Ð¿Ð¾Ñледнего ÑлÑÑÐ°Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½ в пÑимеÑе. + +[NOTE] +==== +ÐÑ Ð¼Ð¾Ð¶ÐµÑе заÑÑавиÑÑ man:rc.subr[8] дейÑÑвоваÑÑ Ñак, как еÑли Ð±Ñ Ð¿ÐµÑеклÑÑаÑÐµÐ»Ñ ÑÑÑановлен в `ON`, незавиÑимо Ð¾Ñ ÐµÐ³Ð¾ ÑекÑÑего знаÑениÑ, добавив пеÑед аÑгÑменÑом ÑкÑипÑа пÑеÑÐ¸ÐºÑ `one` или `force`, напÑÐ¸Ð¼ÐµÑ `onestart` или `forcestop`. Ðднако ÑÑÑиÑе, ÑÑо `force` Ð¸Ð¼ÐµÐµÑ Ð´ÑÑгие опаÑнÑе ÑÑÑекÑÑ, коÑоÑÑе Ð¼Ñ Ð·Ð°ÑÑонем ниже, Ñогда как `one` пÑоÑÑо пеÑеопÑеделÑÐµÑ Ð¿ÐµÑеклÑÑаÑÐµÐ»Ñ ON/OFF. ÐапÑимеÑ, пÑедположим, ÑÑо `dummy_enable` ÑÑÑановлен в `OFF`. СледÑÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° вÑÐ¿Ð¾Ð»Ð½Ð¸Ñ Ð¼ÐµÑод `start`, неÑÐ¼Ð¾Ñ ÑÑ Ð½Ð° наÑÑÑойкÑ: + +[source, shell] +.... +# /etc/rc.d/dummy onestart +.... + +==== + +➍ ТепеÑÑ ÑообÑение, оÑобÑажаемое пÑи загÑÑзке, болÑÑе не жеÑÑко закодиÑовано в ÑкÑипÑе. Ðно задаеÑÑÑ Ð¿ÐµÑеменной `dummy_msg` в man:rc.conf[5]. ÐÑо пÑоÑÑой пÑÐ¸Ð¼ÐµÑ Ñого, как пеÑеменнÑе man:rc.conf[5] могÑÑ ÑпÑавлÑÑÑ ÑкÑипÑом в [.filename]#rc.d#. + +[IMPORTANT] +==== +Ðмена вÑÐµÑ Ð¿ÐµÑеменнÑÑ man:rc.conf[5], иÑполÑзÑемÑÑ Ð¸ÑклÑÑиÑелÑно наÑим ÑкÑипÑом, _должнÑ_ имеÑÑ Ð¾Ð´Ð¸Ð½ и ÑÐ¾Ñ Ð¶Ðµ пÑеÑикÑ: `${name}_`. ÐапÑимеÑ: `dummy_mode`, `dummy_state_file` и Ñак далее. +==== + +[NOTE] +==== +ХоÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð±Ð¾Ð»ÐµÐµ коÑоÑкое Ð¸Ð¼Ñ Ð²Ð½ÑÑÑи, напÑимеÑ, пÑоÑÑо `msg`, добавление ÑникалÑного пÑеÑикÑа `${name}_` ко вÑем глобалÑнÑм именам, вводимÑм наÑим ÑкÑипÑом, Ð¸Ð·Ð±Ð°Ð²Ð¸Ñ Ð½Ð°Ñ Ð¾Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½ÑÑ ÐºÐ¾Ð½ÑликÑов Ñ Ð¿ÑоÑÑÑанÑÑвом имен man:rc.subr[8]. + +Ðак пÑавило, ÑкÑипÑÑ [.filename]#rc.d# базовой ÑиÑÑÐµÐ¼Ñ Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑедоÑÑавлÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ ÑÐ²Ð¾Ð¸Ñ Ð¿ÐµÑеменнÑÑ man:rc.conf[5], поÑколÑÐºÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð² [.filename]#/etc/defaults/rc.conf#. С дÑÑгой ÑÑоÑонÑ, ÑкÑипÑÑ [.filename]#rc.d# Ð´Ð»Ñ Ð¿Ð¾ÑÑов Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑедоÑÑавлÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ, как показано в пÑимеÑе. +==== + +➎ ÐдеÑÑ Ð¼Ñ Ð¸ÑполÑзÑем `dummy_msg` Ð´Ð»Ñ ÑакÑиÑеÑкого ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð°Ñим ÑкÑипÑом, Ñ.е., Ð´Ð»Ñ Ð²ÑдаÑи пеÑеменного ÑообÑениÑ. ÐÑполÑзование shell-ÑÑнкÑии здеÑÑ Ð¸Ð·Ð±ÑÑоÑно, Ñак как она вÑполнÑÐµÑ ÑолÑко Ð¾Ð´Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ; ÑавнознаÑной алÑÑеÑнаÑивой ÑвлÑеÑÑÑ: + +[.programlisting] +.... +start_cmd="echo \"$dummy_msg\"" +.... + +[[rcng-daemon]] +== ÐапÑÑк и оÑÑановка пÑоÑÑого демона + +ÐÑ Ñанее говоÑили, ÑÑо man:rc.subr[8] Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедоÑÑавлÑÑÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð¿Ð¾ ÑмолÑаниÑ. ÐÑевидно, ÑÑо Ñакие меÑÐ¾Ð´Ñ Ð½Ðµ могÑÑ Ð±ÑÑÑ ÑлиÑком обÑими. Ðни Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑ Ð´Ð»Ñ ÑÑандаÑÑного ÑлÑÑÐ°Ñ Ð·Ð°Ð¿ÑÑка и оÑÑановки пÑоÑÑого демона. ÐÑедположим, ÑÑо нам нÑжно напиÑаÑÑ ÑкÑÐ¸Ð¿Ñ [.filename]#rc.d# Ð´Ð»Ñ Ñакого демона Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ `mumbled`. ÐÐ¾Ñ Ð¾Ð½: + +[.programlisting] +.... +#!/bin/sh + +. /etc/rc.subr + +name=mumbled +rcvar=mumbled_enable + +command="/usr/sbin/${name}" <.> + +load_rc_config $name +run_rc_command "$1" +.... + +ÐÑиÑÑно пÑоÑÑо, не Ñак ли? ÐавайÑе ÑаÑÑмоÑÑим Ð½Ð°Ñ Ð½ÐµÐ±Ð¾Ð»ÑÑой ÑкÑипÑ. ÐдинÑÑвенное новое, на ÑÑо ÑÑÐ¾Ð¸Ñ Ð¾Ð±ÑаÑиÑÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ, ÑÑо ÑледÑÑÑее: + +➊ ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ `command` Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение Ð´Ð»Ñ man:rc.subr[8]. ÐÑли она ÑÑÑановлена, man:rc.subr[8] бÑÐ´ÐµÑ Ð´ÐµÐ¹ÑÑвоваÑÑ Ð¿Ð¾ ÑÑенаÑÐ¸Ñ Ð¾Ð±ÑлÑÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑÑного демона. Ð ÑаÑÑноÑÑи, бÑдÑÑ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ñ ÑÑандаÑÑнÑе меÑÐ¾Ð´Ñ Ð´Ð»Ñ ÑÐ°ÐºÐ¸Ñ Ð°ÑгÑменÑов: `start`, `stop`, `restart`, `poll` и `status`. + +Ðемон бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑÑен вÑполнением `$command` Ñ Ñлагами командной ÑÑÑоки, ÑказаннÑми в `$mumbled_flags`. Таким обÑазом, вÑе Ð²Ñ Ð¾Ð´Ð½Ñе даннÑе Ð´Ð»Ñ Ð¼ÐµÑода `start` по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð² пеÑеменнÑÑ , ÑÑÑановленнÑÑ Ð½Ð°Ñим ÑкÑипÑом. РоÑлиÑие Ð¾Ñ `start`, дÑÑгие меÑÐ¾Ð´Ñ Ð¼Ð¾Ð³ÑÑ ÑÑебоваÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной инÑоÑмаÑии о запÑÑенном пÑоÑеÑÑе. ÐапÑимеÑ, `stop` должен знаÑÑ PID пÑоÑеÑÑа, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð²ÐµÑÑиÑÑ ÐµÐ³Ð¾. Рданном ÑлÑÑае, man:rc.subr[8] бÑÐ´ÐµÑ Ð¿ÑоÑмаÑÑиваÑÑ ÑпиÑок вÑÐµÑ Ð¿ÑоÑеÑÑов, иÑа п ÑоÑеÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼, ÑавнÑм `procname`. ÐоÑледний ÑвлÑеÑÑÑ ÐµÑÑ Ð¾Ð´Ð½Ð¾Ð¹ знаÑимой пеÑеменной Ð´Ð»Ñ man:rc.subr[8], и ÐµÑ Ð·Ð½Ð°Ñение пР¾ ÑмолÑÐ°Ð½Ð¸Ñ ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñо знаÑением `command`. ÐÑÑгими Ñловами, когда Ð¼Ñ ÑÑÑанавливаем `command`, `procname` ÑакÑиÑеÑки ÑÑÑанавливаеÑÑÑ Ð² Ñо же знаÑение. ÐÑо позволÑÐµÑ Ð½Ð°ÑÐµÐ¼Ñ ÑкÑипÑÑ Ð·Ð°Ð²ÐµÑÑиÑÑ Ð´ÐµÐ¼Ð¾Ð½ и пÑовеÑиÑÑ, запÑÑен ли он вообÑе. + +[NOTE] +==== +ÐекоÑоÑÑе пÑогÑÐ°Ð¼Ð¼Ñ Ð½Ð° Ñамом деле ÑвлÑÑÑÑÑ Ð¸ÑполнÑемÑми ÑкÑипÑами. СиÑÑема запÑÑÐºÐ°ÐµÑ Ñакие ÑкÑипÑÑ, запÑÑÐºÐ°Ñ Ð¸Ñ Ð¸Ð½ÑеÑпÑеÑаÑÐ¾Ñ Ð¸ пеÑÐµÐ´Ð°Ð²Ð°Ñ ÐµÐ¼Ñ Ð¸Ð¼Ñ ÑкÑипÑа в каÑеÑÑве аÑгÑменÑа командной ÑÑÑоки. ÐÑо оÑÑажаеÑÑÑ Ð² ÑпиÑке пÑоÑеÑÑов, ÑÑо Ð¼Ð¾Ð¶ÐµÑ ÑбиÑÑ Ñ ÑÐ¾Ð»ÐºÑ man:rc.subr[8]. ÐополниÑелÑно ÑледÑÐµÑ ÑÑÑановиÑÑ `command_interpreter`, ÑÑÐ¾Ð±Ñ man:rc.subr[8] знал ÑакÑиÑеÑкое Ð¸Ð¼Ñ Ð¿ÑоÑеÑÑа, еÑли `$command` ÑвлÑеÑÑÑ ÑкÑипÑом. + +ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑкÑипÑа [.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`. + +ÐонеÑно, man:sh[1] позволÑÐµÑ ÑÑÑановиÑÑ `${name}_program` из man:rc.conf[5] или Ñамого ÑкÑипÑа, даже еÑли `command` не задан. Ð ÑÑом ÑлÑÑае ÑпеÑиалÑнÑе ÑвойÑÑва `${name}_program` ÑеÑÑÑÑÑÑ, и она ÑÑановиÑÑÑ Ð¾Ð±ÑÑной пеÑеменной, коÑоÑÑÑ Ð²Ð°Ñ ÑкÑÐ¸Ð¿Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ Ð´Ð»Ñ ÑÐ²Ð¾Ð¸Ñ Ñелей. Ðднако иÑполÑзование `${name}_program` в одиноÑÐºÑ Ð½Ðµ ÑекомендÑеÑÑÑ, Ñак как ÑовмеÑÑное иÑполÑзование Ñ `command` ÑÑало идиомой в [.filename]#rc.d# ÑкÑипÑÐ°Ñ . +==== + +ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подÑобной инÑоÑмаÑии о ÑÑандаÑÑнÑÑ Ð¼ÐµÑÐ¾Ð´Ð°Ñ Ð¾Ð±ÑаÑиÑеÑÑ Ðº man:rc.subr[8]. + +[[rcng-daemon-adv]] +== ÐапÑÑк и оÑÑановка пÑодвинÑÑого демона + +Ðобавим немного мÑÑа к коÑÑÑм пÑедÑдÑÑего ÑкÑипÑа и Ñделаем его более ÑложнÑм и ÑÑнкÑионалÑнÑм. СÑандаÑÑнÑе меÑÐ¾Ð´Ñ Ð¼Ð¾Ð³ÑÑ Ñ Ð¾ÑоÑо ÑпÑавлÑÑÑÑÑ Ñ Ð·Ð°Ð´Ð°Ñами, но иногда ÑÑебÑеÑÑÑ Ð¸Ñ ÑÐ¾Ð½ÐºÐ°Ñ Ð½Ð°ÑÑÑойка. ТепеÑÑ Ð¼Ñ Ñзнаем, как адапÑиÑоваÑÑ ÑÑандаÑÑнÑе меÑÐ¾Ð´Ñ Ð¿Ð¾Ð´ наÑи нÑждÑ. + +[.programlisting] +.... +#!/bin/sh + +. /etc/rc.subr + +name=mumbled +rcvar=mumbled_enable + +command="/usr/sbin/${name}" +command_args="mock arguments > /dev/null 2>&1" <.> + +pidfile="/var/run/${name}.pid" <.> + +required_files="/etc/${name}.conf /usr/share/misc/${name}.rules" <.> + +sig_reload="USR1" <.> + +start_precmd="${name}_prestart" <.> +stop_postcmd="echo Bye-bye" <.> + +extra_commands="reload plugh xyzzy" <.> + +plugh_cmd="mumbled_plugh" <.> +xyzzy_cmd="echo 'Nothing happens.'" + +mumbled_prestart() +{ + if checkyesno mumbled_smart; then <.> + rc_flags="-o smart ${rc_flags}" <.> + fi + case "$mumbled_mode" in + foo) + rc_flags="-frotz ${rc_flags}" + ;; + bar) + rc_flags="-baz ${rc_flags}" + ;; + *) + warn "Invalid value for mumbled_mode" <.> + return 1 <.> + ;; + esac + run_rc_command xyzzy <.> + return 0 +} + +mumbled_plugh() <.> +{ + echo 'A hollow voice says "plugh".' +} + +load_rc_config $name +run_rc_command "$1" +.... + +➊ ÐополниÑелÑнÑе аÑгÑменÑÑ Ð´Ð»Ñ `$command` могÑÑ Ð±ÑÑÑ Ð¿ÐµÑÐµÐ´Ð°Ð½Ñ Ð² `command_args`. Ðни бÑдÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð² команднÑÑ ÑÑÑÐ¾ÐºÑ Ð¿Ð¾Ñле `$mumbled_flags`. ÐоÑколÑÐºÑ Ð¸ÑÐ¾Ð³Ð¾Ð²Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ ÑÑÑока пеÑедаÑÑÑÑ Ð² `eval` Ð´Ð»Ñ ÑакÑиÑеÑкого вÑполнениÑ, пеÑенапÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð²Ð¾Ð´Ð° и вÑвода могÑÑ Ð±ÑÑÑ ÑÐºÐ°Ð·Ð°Ð½Ñ Ð² `command_args`. + +[NOTE] +==== +Ðикогда не вклÑÑайÑе паÑамеÑÑÑ Ñ Ð´ÐµÑиÑами, Ñакие как `-X` или `--foo`, в `command_args`. СодеÑжимое `command_args` бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ в ÐºÐ¾Ð½ÐµÑ Ð¸Ñоговой командной ÑÑÑоки, поÑÑомÑ, ÑкоÑее вÑего, окажеÑÑÑ Ð¿Ð¾Ñле аÑгÑменÑов, ÑказаннÑÑ Ð² `${name}_flags`; однако болÑÑинÑÑво команд не ÑаÑпознаÑÑ Ð¿Ð°ÑамеÑÑÑ Ñ Ð´ÐµÑиÑами поÑле обÑÑнÑÑ Ð°ÑгÑменÑов. ÐÑÑÑий ÑпоÑоб пеÑедаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе паÑамеÑÑÑ Ð² `$command` â добавиÑÑ Ð¸Ñ Ð² наÑало `${name}_flags`. ÐÑÑгой ÑпоÑоб â измениÑÑ `rc_flags` crossref:rc-script ing[rc-flags, как показано далее]. +==== + +➋ ÐежливÑй демон должен ÑоздаваÑÑ _pidfile_, ÑÑÐ¾Ð±Ñ ÐµÐ³Ð¾ пÑоÑеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло найÑи пÑоÑе и надежнее. ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ `pidfile`, еÑли она ÑÑÑановлена, ÑказÑÐ²Ð°ÐµÑ man:rc.subr[8], где можно найÑи pidfile Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐµÐ³Ð¾ ÑÑандаÑÑнÑми меÑодами. + +[NOTE] +==== +Ðа Ñамом деле, man:rc.subr[8] Ñакже иÑполÑзÑÐµÑ pidfile Ð´Ð»Ñ Ð¿ÑовеÑки, запÑÑен ли демон, пеÑед его запÑÑком. ÐÑÑ Ð¿ÑовеÑÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ пÑопÑÑÑиÑÑ, иÑполÑзÑÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ `faststart`. +==== + +➌ ÐÑли демон не Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ Ð±ÐµÐ· опÑеделÑннÑÑ Ñайлов, пÑоÑÑо ÑкажиÑе Ð¸Ñ Ð² `required_files`, и man:rc.subr[8] пÑовеÑÐ¸Ñ Ð¸Ñ Ð½Ð°Ð»Ð¸Ñие пеÑед запÑÑком демона. Также ÑÑÑеÑÑвÑÑÑ `required_dirs` и `required_vars` Ð´Ð»Ñ ÐºÐ°Ñалогов и пеÑеменнÑÑ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ ÑооÑвеÑÑÑвенно. ÐÑе они подÑобно опиÑÐ°Ð½Ñ Ð² man:rc.subr[8]. + +[NOTE] +==== +ÐеÑод по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð· man:rc.subr[8] можно пÑинÑдиÑелÑно заÑÑавиÑÑ Ð¿ÑопÑÑÑиÑÑ Ð¿ÑовеÑки пÑедваÑиÑелÑнÑÑ ÑÑловий, иÑполÑзÑÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ `forcestart` в ÑкÑипÑе. +==== + +➍ ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ наÑÑÑоиÑÑ ÑигналÑ, оÑпÑавлÑемÑе демонÑ, еÑли они оÑлиÑаÑÑÑÑ Ð¾Ñ Ð¾Ð±ÑеизвеÑÑнÑÑ . Ð ÑаÑÑноÑÑи, `sig_reload` ÑказÑÐ²Ð°ÐµÑ Ñигнал, коÑоÑÑй заÑÑавлÑÐµÑ Ð´ÐµÐ¼Ð¾Ð½Ð° пеÑезагÑÑзиÑÑ ÑÐ²Ð¾Ñ ÐºÐ¾Ð½ÑигÑÑаÑиÑ; по ÑмолÑÐ°Ð½Ð¸Ñ ÑÑо SIGHUP. ÐÑÑгой Ñигнал оÑпÑавлÑеÑÑÑ Ð´Ð»Ñ Ð¾ÑÑановки пÑоÑеÑÑа демона; по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ SIGTERM, но ÑÑо можно измениÑÑ, ÑÑÑановив `sig_stop` ÑооÑвеÑÑÑвÑÑÑим обÑазом. + +[NOTE] +==== +Ðмена Ñигналов Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказÑваÑÑÑÑ Ð´Ð»Ñ man:rc.subr[8] без пÑеÑикÑа `SIG`, как показано в пÑимеÑе. ÐеÑÑÐ¸Ñ man:kill[1] в FreeBSD Ð¼Ð¾Ð¶ÐµÑ ÑаÑпознаваÑÑ Ð¿ÑеÑÐ¸ÐºÑ `SIG`, но веÑÑии из дÑÑÐ³Ð¸Ñ Ñипов ÐС могÑÑ Ð½Ðµ поддеÑживаÑÑ ÐµÐ³Ð¾. +==== + +➎➏ ÐÑполнение дополниÑелÑнÑÑ Ð·Ð°Ð´Ð°Ñ Ð´Ð¾ или поÑле ÑÑандаÑÑнÑÑ Ð¼ÐµÑодов â ÑÑо пÑоÑÑо. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ аÑгÑменÑа командÑ, поддеÑживаемого наÑим ÑкÑипÑом, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ опÑеделиÑÑ `argument_precmd` и `argument_postcmd`. ÐÑи ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ man:sh[1] вÑзÑваÑÑÑÑ Ð´Ð¾ и поÑле ÑооÑвеÑÑÑвÑÑÑего меÑода, ÑÑо оÑевидно из Ð¸Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ð¹. + +[NOTE] +==== +ÐеÑеопÑеделение ÑÑандаÑÑного меÑода Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого `argument_cmd` вÑÑ Ñавно не меÑÐ°ÐµÑ Ð½Ð°Ð¼ иÑполÑзоваÑÑ `argument_precmd` или `argument_postcmd`, еÑли ÑÑо Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾. Ð ÑаÑÑноÑÑи, пеÑвÑй полезен Ð´Ð»Ñ Ð¿ÑовеÑки полÑзоваÑелÑÑÐºÐ¸Ñ ÑложнÑÑ ÑÑловий, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ Ð¿ÐµÑед вÑполнением Ñамой командÑ. ÐÑполÑзование `argument_precmd` вмеÑÑе Ñ `argument_cmd` позволÑÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑки ÑазделиÑÑ Ð¿ÑовеÑки Ð¾Ñ Ð´ÐµÐ¹ÑÑвиÑ. + +Ðе забÑвайÑе, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑÑавлÑÑÑ Ð»ÑбÑе допÑÑÑимÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð· man:sh[1] в опÑеделÑемÑе вами меÑодÑ, а Ñакже ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ pre- и post-. ÐÑоÑÑо вÑзÑваÑÑ ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð²ÑполнÑÐµÑ Ð¾ÑновнÑÑ ÑабоÑÑ, â ÑÑо Ñ Ð¾ÑоÑий ÑÑÐ¸Ð»Ñ Ð² болÑÑинÑÑве ÑлÑÑаев, но никогда не позволÑйÑе ÑÑÐ¸Ð»Ñ Ð¾Ð³ÑаниÑиваÑÑ Ð²Ð°Ñе понимание Ñого, ÑÑо пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð·Ð° кÑлиÑами. +==== + +➐ ÐÑли Ð¼Ñ Ñ Ð¾Ñим ÑеализоваÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие аÑгÑменÑÑ, коÑоÑÑе Ñакже можно ÑаÑÑмаÑÑиваÑÑ ÐºÐ°Ðº _командÑ_ Ð´Ð»Ñ Ð½Ð°Ñего ÑкÑипÑа, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ пеÑеÑиÑлиÑÑ Ð¸Ñ Ð² `extra_commands` и пÑедоÑÑавиÑÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð´Ð»Ñ Ð¸Ñ Ð¾Ð±ÑабоÑки. + +[NOTE] +==== +Ðоманда `reload` ÑвлÑеÑÑÑ Ð¾Ñобенной. С одной ÑÑоÑонÑ, Ñ Ð½ÐµÑ ÐµÑÑÑ Ð¿ÑедÑÑÑановленнÑй меÑод в man:rc.subr[8]. С дÑÑгой ÑÑоÑонÑ, `reload` не пÑедлагаеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ. ÐÑиÑина в Ñом, ÑÑо не вÑе Ð´ÐµÐ¼Ð¾Ð½Ñ Ð¸ÑполÑзÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñй Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ пеÑезагÑÑзки, а Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð²Ð¾Ð¾Ð±Ñе Ð½ÐµÑ Ð½Ð¸Ñего Ð´Ð»Ñ Ð¿ÐµÑезагÑÑзки. ÐоÑÑÐ¾Ð¼Ñ Ð½Ð°Ð¼ нÑжно Ñвно запÑоÑиÑÑ Ð¿ÑедоÑÑавление вÑÑÑоенной ÑÑнкÑионалÑноÑÑи. ÐÑо можно ÑделаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `extra_commands`. + +ЧÑо Ð¼Ñ Ð¿Ð¾Ð»ÑÑаем Ð¾Ñ Ð¼ÐµÑода по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ `reload`? ÐоволÑно ÑаÑÑо Ð´ÐµÐ¼Ð¾Ð½Ñ Ð¿ÐµÑезагÑÑжаÑÑ ÑÐ²Ð¾Ñ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð¿Ñи полÑÑении Ñигнала â обÑÑно, SIGHUP. ÐоÑÑÐ¾Ð¼Ñ man:rc.subr[8] пÑÑаеÑÑÑ Ð¿ÐµÑезагÑÑзиÑÑ Ð´ÐµÐ¼Ð¾Ð½Ð°, оÑпÑавлÑÑ ÐµÐ¼Ñ Ñигнал. Сигнал пÑедÑÑÑановлен на SIGHUP, но Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½Ñн ÑеÑез `sig_reload` пÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи. +==== + +➑⓮ ÐÐ°Ñ ÑкÑÐ¸Ð¿Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð´Ð²Ðµ неÑÑандаÑÑнÑе командÑ: `plugh` и `xyzzy`. ÐÑ Ð²Ð¸Ð´ÐµÐ»Ð¸ Ð¸Ñ Ð² ÑпиÑке `extra_commands`, и ÑепеÑÑ Ð¿ÑиÑло вÑÐµÐ¼Ñ ÑеализоваÑÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð´Ð»Ñ Ð½Ð¸Ñ . ÐеÑод Ð´Ð»Ñ `xyzzy` пÑоÑÑо вÑÑÑоен в код, а Ð´Ð»Ñ `plugh` он Ñеализован как ÑÑнкÑÐ¸Ñ `mumbled_plugh`. + +ÐеÑÑандаÑÑнÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð½Ðµ вÑзÑваÑÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð·Ð°Ð¿ÑÑка или завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ. ÐбÑÑно они пÑедназнаÑÐµÐ½Ñ Ð´Ð»Ñ ÑдобÑÑва ÑиÑÑемного админиÑÑÑаÑоÑа. Ðни Ñакже могÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´ÑÑгими подÑиÑÑемами, напÑимеÑ, man:devd[8], еÑли ÑÐºÐ°Ð·Ð°Ð½Ñ Ð² man:devd.conf[5]. + +ÐолнÑй ÑпиÑок доÑÑÑпнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ можно найÑи в ÑÑÑоке иÑполÑзованиÑ, вÑводимой man:rc.subr[8], когда ÑкÑÐ¸Ð¿Ñ Ð²ÑзÑваеÑÑÑ Ð±ÐµÐ· аÑгÑменÑов. ÐапÑимеÑ, Ð²Ð¾Ñ ÑÑÑока иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· изÑÑаемого ÑкÑипÑа: + +[source, shell] +.... +# /etc/rc.d/mumbled +Usage: /etc/rc.d/mumbled [fast|force|one](start|stop|restart|rcvar|reload|plugh|xyzzy|status|poll) +.... + +⓭ СкÑÐ¸Ð¿Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзÑваÑÑ Ñвои ÑобÑÑвеннÑе ÑÑандаÑÑнÑе или неÑÑандаÑÑнÑе командÑ, еÑли ÑÑо Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ð¿Ð¾Ñ Ð¾Ð¶Ðµ на вÑзов ÑÑнкÑий, но Ð¼Ñ Ð·Ð½Ð°ÐµÐ¼, ÑÑо ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸ ÑÑнкÑии оболоÑки не вÑегда одно и Ñо же. ÐапÑимеÑ, `xyzzy` не Ñеализован как ÑÑнкÑÐ¸Ñ Ð² данном ÑлÑÑае. ÐÑоме Ñого, могÑÑ ÑÑÑеÑÑвоваÑÑ Ð¿Ñед-команда и поÑÑ-команда, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑзÑваÑÑÑÑ Ð² опÑеделÑнном поÑÑдке. ÐоÑÑÐ¾Ð¼Ñ Ð¿ÑавилÑнÑй ÑпоÑоб Ð´Ð»Ñ ÑкÑипÑа вÑполниÑÑ ÑÐ²Ð¾Ñ ÑобÑÑвеннÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ â Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ man:rc.subr[8], как показано в пÑимеÑе. + +➒ ÐÐ¾Ð»ÐµÐ·Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ `checkyesno` пÑедоÑÑавлÑеÑÑÑ man:rc.subr[8]. Ðна пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¸Ð¼Ñ Ð¿ÐµÑеменной в каÑеÑÑве аÑгÑменÑа и возвÑаÑÐ°ÐµÑ Ð½Ñлевой код вÑÑ Ð¾Ð´Ð° ÑолÑко еÑли пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑÑÑановлена в `YES`, `TRUE`, `ON` или `1`, без ÑÑÑÑа ÑегиÑÑÑа; в пÑоÑивном ÑлÑÑае возвÑаÑаеÑÑÑ Ð½ÐµÐ½Ñлевой код вÑÑ Ð¾Ð´Ð°. РпоÑледнем ÑлÑÑае ÑÑнкÑÐ¸Ñ Ð¿ÑовеÑÑеÑ, ÑÑÑановлена ли пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð² `NO`, `FALSE`, `OFF` или `0`, Ñакже без ÑÑÑÑа ÑегиÑÑÑа; еÑли пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑодеÑÐ¶Ð¸Ñ ÑÑо-Ñо иное (Ñ.е. мÑÑоÑ), ÑÑнкÑÐ¸Ñ Ð²Ñ Ð²Ð¾Ð´Ð¸Ñ Ð¿ÑедÑпÑеждение. + +ÐмейÑе в видÑ, ÑÑо Ð´Ð»Ñ man:sh[1] нÑлевой код возвÑаÑа ознаÑÐ°ÐµÑ Ð¸ÑÑинÑ, а ненÑлевой код возвÑаÑа ознаÑÐ°ÐµÑ Ð»Ð¾Ð¶Ñ. + +[IMPORTANT] +==== +ФÑнкÑÐ¸Ñ `checkyesno` пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ __Ð¸Ð¼Ñ Ð¿ÐµÑеменной__. Ðе пеÑедавайÑе ей _знаÑение_ пеÑеменной; ÑÑо не бÑÐ´ÐµÑ ÑабоÑаÑÑ, как ожидаеÑÑÑ. + +Ðиже пÑиведено пÑавилÑное иÑполÑзование `checkyesno`: + +[.programlisting] +.... +if checkyesno mumbled_enable; then + foo +fi +.... + +ÐапÑоÑив, вÑзов `checkyesno`, как показано ниже, не ÑÑабоÑÐ°ÐµÑ â по кÑайней меÑе, не Ñак, как ожидаеÑÑÑ: + +[.programlisting] +.... +if checkyesno "${mumbled_enable}"; then + foo +fi +.... + +==== + +➓ [[rc-flags]] ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ влиÑÑÑ Ð½Ð° Ñлаги, пеÑедаваемÑе команде `$command`, изменÑÑ `rc_flags` в `$start_precmd`. + +⓫ РнекоÑоÑÑÑ ÑлÑÑаÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð²ÑвеÑÑи важное ÑообÑение, коÑоÑое Ñакже должно попаÑÑÑ Ð² `syslog`. ÐÑо можно легко ÑделаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑледÑÑÑÐ¸Ñ ÑÑнкÑий man:rc.subr[8]: `debug`, `info`, `warn` и `err`. ÐоÑледнÑÑ ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐ°ÐµÑ Ð²Ñполнение ÑкÑипÑа Ñ ÑказаннÑм кодом. + +⓬ ÐÐ¾Ð´Ñ Ð²ÑÑ Ð¾Ð´Ð° из меÑодов и Ð¸Ñ Ð¿ÑедваÑиÑелÑнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ не пÑоÑÑо игноÑиÑÑÑÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ. ÐÑли `argument_precmd` возвÑаÑÐ°ÐµÑ Ð½ÐµÐ½Ñлевой код вÑÑ Ð¾Ð´Ð°, оÑновной меÑод не бÑÐ´ÐµÑ Ð²Ñполнен. Ð ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, `argument_postcmd` не бÑÐ´ÐµÑ Ð²Ñзван, еÑли оÑновной меÑод возвÑаÑÐ°ÐµÑ Ð½ÐµÐ½Ñлевой код вÑÑ Ð¾Ð´Ð°. + +[NOTE] +==== +Ðднако man:rc.subr[8] можно ÑказаÑÑ Ð¸Ð· командной ÑÑÑоки игноÑиÑоваÑÑ ÑÑи ÐºÐ¾Ð´Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¸ вÑполнÑÑÑ Ð²Ñе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² лÑбом ÑлÑÑае, добавив пÑеÑÐ¸ÐºÑ `force` к аÑгÑменÑÑ, напÑÐ¸Ð¼ÐµÑ `forcestart`. +==== + +[[rcng-hookup]] +== ÐодклÑÑение ÑкÑипÑа к инÑÑаÑÑÑÑкÑÑÑе rc.d + +ÐоÑле напиÑÐ°Ð½Ð¸Ñ ÑкÑипÑа его Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ инÑегÑиÑоваÑÑ Ð² [.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-ÑкÑÐ¸Ð¿Ñ Ñ]. + +Ðднако ÑледÑÐµÑ Ð·Ð°Ñанее пÑодÑмаÑÑ Ð¼ÐµÑÑо наÑего ÑкÑипÑа в поÑледоваÑелÑноÑÑи запÑÑка ÑиÑÑемÑ. СкоÑее вÑего, обÑлÑживаемÑй наÑим ÑкÑипÑом ÑеÑÐ²Ð¸Ñ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ Ð¾Ñ Ð´ÑÑÐ³Ð¸Ñ ÑеÑвиÑов. ÐапÑимеÑ, ÑеÑевой демон не Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ Ð±ÐµÐ· поднÑÑÑÑ ÑеÑевÑÑ Ð¸Ð½ÑеÑÑейÑов и маÑÑÑÑÑизаÑии. Ðаже еÑли ÑеÑвиÑ, казалоÑÑ Ð±Ñ, ниÑего не ÑÑебÑеÑ, он вÑÑд ли ÑÐ¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¿ÑÑÑиÑÑÑÑ Ð´Ð¾ пÑовеÑки и монÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾ÑновнÑÑ ÑайловÑÑ ÑиÑÑем. + +ÐÑ Ñже Ñпоминали man:rcorder[8]. ТепеÑÑ Ð¿ÑиÑло вÑÐµÐ¼Ñ ÑаÑÑмоÑÑеÑÑ ÐµÐ³Ð¾ подÑобнее. РдвÑÑ ÑÐ»Ð¾Ð²Ð°Ñ , man:rcorder[8] пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ð°Ð±Ð¾Ñ Ñайлов, анализиÑÑÐµÑ Ð¸Ñ ÑодеÑжимое и вÑÐ²Ð¾Ð´Ð¸Ñ Ð½Ð° `stdout` ÑпиÑок ÑÑÐ¸Ñ Ñайлов, ÑпоÑÑдоÑеннÑй по завиÑимоÑÑÑм. ÐÐ»Ð°Ð²Ð½Ð°Ñ Ð¸Ð´ÐµÑ Ð·Ð°ÐºÐ»ÑÑаеÑÑÑ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ñ ÑаниÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ завиÑимоÑÑÑÑ _внÑÑÑи_ Ñайлов, ÑÑÐ¾Ð±Ñ ÐºÐ°Ð¶Ð´Ñй Ñайл мог опиÑÑваÑÑ ÑолÑко ÑебÑ. Файл Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÑледÑÑÑÑÑ Ð¸Ð½ÑоÑмаÑиÑ: + +* имена "ÑÑловий" (ÑÑо Ð´Ð»Ñ Ð½Ð°Ñ Ð¾Ð·Ð½Ð°ÑÐ°ÐµÑ ÑеÑвиÑÑ), коÑоÑÑе он __пÑедоÑÑавлÑеÑ__; +* имена "ÑÑловий", коÑоÑÑе он __ÑÑебÑеÑ__; +* имена "ÑÑловий", пеÑед коÑоÑÑми должен вÑполнÑÑÑÑÑ ÑÑÐ¾Ñ Ñайл; +* дополниÑелÑнÑе _клÑÑевÑе Ñлова_, коÑоÑÑе могÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð²ÑбоÑа подмножеÑÑва из вÑего набоÑа Ñайлов (man:rcorder[8] Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ð°ÑÑÑоен Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿Ñий Ð´Ð»Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ иÑклÑÑÐµÐ½Ð¸Ñ Ñайлов, ÑодеÑжаÑÐ¸Ñ ÑказаннÑе клÑÑевÑе Ñлова.) + +ÐеÑдивиÑелÑно, ÑÑо man:rcorder[8] Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ ÑолÑко ÑекÑÑовÑе ÑÐ°Ð¹Ð»Ñ Ñ ÑинÑакÑиÑом, близким к man:sh[1]. То еÑÑÑ ÑпеÑиалÑнÑе ÑÑÑоки, понимаемÑе man:rcorder[8], вÑглÑдÑÑ ÐºÐ°Ðº комменÑаÑии в man:sh[1]. СинÑакÑÐ¸Ñ ÑÐ°ÐºÐ¸Ñ ÑпеÑиалÑнÑÑ ÑÑÑок доволÑно жÑÑÑкий, ÑÑÐ¾Ð±Ñ ÑпÑоÑÑиÑÑ Ð¸Ñ Ð¾Ð±ÑабоÑкÑ. ÐодÑобноÑÑи Ñм. в man:rcorder[8]. + +Ðомимо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑпеÑиалÑнÑÑ ÑÑÑок man:rcorder[8], ÑкÑÐ¸Ð¿Ñ Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°ÑÑаиваÑÑ Ð½Ð° Ñвоей завиÑимоÑÑи Ð¾Ñ Ð´ÑÑгой ÑлÑжбÑ, пÑоÑÑо пÑинÑдиÑелÑно запÑÑÐºÐ°Ñ ÐµÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾, когда дÑÑÐ³Ð°Ñ ÑлÑжба ÑвлÑеÑÑÑ Ð¾Ð¿ÑионалÑной и не запÑÑкаеÑÑÑ ÑамоÑÑоÑÑелÑно, поÑÐ¾Ð¼Ñ ÑÑо ÑиÑÑемнÑй админиÑÑÑаÑÐ¾Ñ Ð¾ÑибоÑно оÑклÑÑил ÐµÑ Ð² man:rc.conf[5]. + +С ÑÑеÑом ÑÑÐ¸Ñ Ð¾Ð±ÑÐ¸Ñ Ð·Ð½Ð°Ð½Ð¸Ð¹ ÑаÑÑмоÑÑим пÑоÑÑой ÑкÑÐ¸Ð¿Ñ Ð´ÐµÐ¼Ð¾Ð½Ð°, дополненнÑй завиÑимоÑÑÑми: + +[.programlisting] +.... +#!/bin/sh + +# PROVIDE: mumbled oldmumble <.> +# REQUIRE: DAEMON cleanvar frotz <.> +# BEFORE: LOGIN <.> +# KEYWORD: nojail shutdown <.> + +. /etc/rc.subr + +name=mumbled +rcvar=mumbled_enable + +command="/usr/sbin/${name}" +start_precmd="${name}_prestart" + +mumbled_prestart() +{ + if ! checkyesno frotz_enable && \ + ! /etc/rc.d/frotz forcestatus 1>/dev/null 2>&1; then + force_depend frotz || return 1 <.> + fi + return 0 +} + +load_rc_config $name +run_rc_command "$1" +.... + +Ðак и Ñанее, ÑледÑÐµÑ Ð´ÐµÑалÑнÑй анализ: + +➊ ÐÑа ÑÑÑока обÑÑвлÑÐµÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ "ÑÑловий", коÑоÑÑе пÑедоÑÑавлÑÐµÑ Ð½Ð°Ñ ÑкÑипÑ. ТепеÑÑ Ð´ÑÑгие ÑкÑипÑÑ Ð¼Ð¾Ð³ÑÑ ÑказÑваÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ Ð¾Ñ Ð½Ð°Ñего ÑкÑипÑа по ÑÑим именам. + +[NOTE] +==== +ÐбÑÑно ÑкÑÐ¸Ð¿Ñ ÑказÑÐ²Ð°ÐµÑ Ð¾Ð´Ð½Ð¾ пÑедоÑÑавленное ÑÑловие. Ðднако ниÑÑо не меÑÐ°ÐµÑ Ð½Ð°Ð¼ пеÑеÑиÑлиÑÑ Ð½ÐµÑколÑко ÑÑловий, напÑимеÑ, по пÑиÑинам ÑовмеÑÑимоÑÑи. + +РлÑбом ÑлÑÑае, название оÑновного или единÑÑвенного ÑÑÐ»Ð¾Ð²Ð¸Ñ `PROVIDE:` должно ÑовпадаÑÑ Ñ `${name}`. +==== + +➋➌ Таким обÑазом, Ð½Ð°Ñ ÑкÑÐ¸Ð¿Ñ ÑказÑваеÑ, Ð¾Ñ ÐºÐ°ÐºÐ¸Ñ "ÑÑловий", пÑедоÑÑавлÑемÑÑ Ð´ÑÑгими ÑкÑипÑами, он завиÑиÑ. СоглаÑно ÑÑÑокам, Ð½Ð°Ñ ÑкÑÐ¸Ð¿Ñ Ð¿ÑоÑÐ¸Ñ man:rcorder[8] ÑазмеÑÑиÑÑ ÐµÐ³Ð¾ поÑле ÑкÑипÑа(ов), пÑедоÑÑавлÑÑÑÐ¸Ñ [.filename]#DAEMON# и [.filename]#cleanvar#, но пеÑед Ñем, коÑоÑÑй пÑедоÑÑавлÑÐµÑ [.filename]#LOGIN#. + +[NOTE] +==== +СÑÑÐ¾ÐºÑ `BEFORE:` не ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð´Ð»Ñ Ð¾Ð±Ñ Ð¾Ð´Ð° неполного ÑпиÑка завиÑимоÑÑей в дÑÑгом ÑкÑипÑе. ÐÑавилÑнÑй ÑлÑÑай Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ `BEFORE:` â когда дÑÑгой ÑкÑÐ¸Ð¿Ñ Ð½Ðµ завиÑÐ¸Ñ Ð¾Ñ Ð½Ð°Ñего, но Ð½Ð°Ñ ÑкÑÐ¸Ð¿Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполниÑÑ ÑÐ²Ð¾Ñ Ð·Ð°Ð´Ð°ÑÑ Ð»ÑÑÑе, еÑли запÑÑÑиÑÑÑ Ð´Ð¾ дÑÑгого. ТипиÑнÑй пÑÐ¸Ð¼ÐµÑ Ð¸Ð· ÑеалÑной жизни â ÑеÑевÑе инÑеÑÑейÑÑ Ð¸ межÑеÑевой ÑкÑан: Ñ Ð¾ÑÑ Ð¸Ð½ÑеÑÑейÑÑ Ð½Ðµ завиÑÑÑ Ð¾Ñ Ð¼ÐµÐ¶ÑеÑевого ÑкÑана пÑи вÑполнении Ñвоей ÑабоÑÑ, безопаÑноÑÑÑ ÑиÑÑÐµÐ¼Ñ Ð ²ÑигÑаеÑ, еÑли межÑеÑевой ÑкÑан бÑÐ´ÐµÑ Ð³Ð¾Ñов до наÑала ÑеÑевого ÑÑаÑика. + +Ðомимо ÑÑловий, ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ Ð¾ÑделÑнÑм ÑлÑжбам, ÑÑÑеÑÑвÑÑÑ Ð¼ÐµÑаÑÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ Ð¸Ñ "заглÑÑки" ÑкÑипÑов, иÑполÑзÑемÑе Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑннÑÑ Ð³ÑÑпп опеÑаÑий в заданном поÑÑдке. Ðни обознаÑаÑÑÑÑ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ в [.filename]#ÐÐРХÐÐÐ Ð ÐÐÐСТРÐ#. ÐÑ ÑпиÑок и назнаÑение можно найÑи в man:rc[8]. + +ÐмейÑе в видÑ, ÑÑо Ñказание имени ÑлÑÐ¶Ð±Ñ Ð² ÑÑÑоке `REQUIRE:` не гаÑанÑиÑÑеÑ, ÑÑо ÑлÑжба дейÑÑвиÑелÑно бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑÑена к моменÑÑ ÑÑаÑÑа наÑего ÑкÑипÑа. ТÑебÑÐµÐ¼Ð°Ñ ÑлÑжба Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ запÑÑÑиÑÑÑÑ Ð¸Ð»Ð¸ бÑÑÑ Ð¾ÑклÑÑена в man:rc.conf[5]. ÐÑевидно, man:rcorder[8] не Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑÑлеживаÑÑ Ñакие деÑали, и man:rc[8] Ñоже ÑÑого не делаеÑ. СледоваÑелÑно, пÑиложение, запÑÑкаемое наÑим ÑкÑипÑом, должно бÑÑÑ ÑпоÑобно обÑабаÑÑваÑÑ ÑиÑÑаÑии, когда ÑÑебÑемÑе ÑлÑÐ¶Ð±Ñ Ð½ÐµÐ´Ð¾ÑÑÑпнÑ. Рнеко ÑоÑÑÑ ÑлÑÑаÑÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ помоÑÑ ÐµÐ¼Ñ, как опиÑано в crossref:rc-scripting[forcedep, ниже] +==== + +[[keywords]]➍ Ðак Ð¼Ñ Ð¿Ð¾Ð¼Ð½Ð¸Ð¼ из ÑекÑÑа вÑÑе, клÑÑевÑе Ñлова man:rcorder[8] могÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð²ÑбоÑа или иÑклÑÑÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ ÑкÑипÑов. Рименно, лÑбой поÑÑебиÑÐµÐ»Ñ man:rcorder[8] Ð¼Ð¾Ð¶ÐµÑ ÑказаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿Ñий `-k` и `-s`, какие клÑÑевÑе Ñлова Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð² "ÑпиÑке ÑÐ¾Ñ ÑанениÑ" и "ÑпиÑке пÑопÑÑка" ÑооÑвеÑÑÑвенно. Ðз вÑÐµÑ Ñайлов, подлежаÑÐ¸Ñ ÑоÑÑиÑовке по завиÑимоÑÑÑм, man:rcorder[8] вÑбеÑÐµÑ ÑолÑко Ñе, коÑоÑÑе имеÑÑ ÐºÐ»ÑÑевое Ñлово из ÑпиÑка ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ (еÑли он н е пÑÑÑ) и не имеÑÑ ÐºÐ»ÑÑевого Ñлова из ÑпиÑка пÑопÑÑка. + +Ð FreeBSD, man:rcorder[8] иÑполÑзÑеÑÑÑ [.filename]#/etc/rc# и [.filename]#/etc/rc.shutdown#. ÐÑи два ÑкÑипÑа опÑеделÑÑÑ ÑÑандаÑÑнÑй ÑпиÑок клÑÑевÑÑ Ñлов [.filename]#rc.d# FreeBSD и Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑледÑÑÑим обÑазом: + +nojail:: СеÑÐ²Ð¸Ñ Ð½Ðµ пÑедназнаÑен Ð´Ð»Ñ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ man:jail[8]. ÐÑоÑедÑÑÑ Ð°Ð²ÑомаÑиÑеÑкого запÑÑка и оÑÑановки бÑдÑÑ Ð¸Ð³Ð½Ð¾ÑиÑоваÑÑ ÑкÑипÑ, еÑли он Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð²Ð½ÑÑÑи клеÑки. + +nostart:: СлÑжба должна запÑÑкаÑÑÑÑ Ð²ÑÑÑнÑÑ Ð¸Ð»Ð¸ не запÑÑкаÑÑÑÑ Ð²Ð¾Ð²Ñе. ÐÑоÑедÑÑа авÑомаÑиÑеÑкого запÑÑка пÑоигноÑиÑÑÐµÑ ÑкÑипÑ. Ð ÑоÑеÑании Ñ ÐºÐ»ÑÑевÑм Ñловом [.filename]#shutdown# ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÑкÑипÑов, вÑполнÑÑÑÐ¸Ñ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ ÑолÑко пÑи вÑклÑÑении ÑиÑÑемÑ. + +shutdown:: ÐÑÐ¾Ñ ÐºÐ»ÑÑевой паÑамеÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ñказан __Ñвно__, еÑли ÑлÑÐ¶Ð±Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ оÑÑановиÑÑ Ð¿ÐµÑед завеÑÑением ÑабоÑÑ ÑиÑÑемÑ. + +[NOTE] +==== +Ðогда ÑиÑÑема ÑобиÑаеÑÑÑ Ð·Ð°Ð²ÐµÑÑиÑÑ ÑабоÑÑ, вÑполнÑеÑÑÑ [.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]. Ð ÑаÑÑноÑÑи, ÑлÑÐ¶Ð±Ñ ÑледÑÐµÑ Ð¾ÑÑанавливаÑÑ Ñвно, еÑли Ð´Ð»Ñ ÐµÑ ÐºÐ¾ÑÑекÑного завеÑÑ ÐµÐ½Ð¸Ñ ÑÑебÑеÑÑÑ Ð·Ð½Ð°ÑиÑеÐ! »Ñное вÑÐµÐ¼Ñ Ð¸Ð»Ð¸ ÑпеÑиалÑнÑе дейÑÑвиÑ. ТипиÑнÑй пÑÐ¸Ð¼ÐµÑ Ñакой ÑлÑÐ¶Ð±Ñ â ÑиÑÑема ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ даннÑÑ . +==== + +[[forcedep]]➎ ÐÑежде вÑего, `force_depend` ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ Ñ Ð±Ð¾Ð»ÑÑой оÑÑоÑожноÑÑÑÑ. ÐбÑÑно лÑÑÑе пеÑеÑмоÑÑеÑÑ Ð¸ÐµÑаÑÑ Ð¸Ñ ÐºÐ¾Ð½ÑигÑÑаÑионнÑÑ Ð¿ÐµÑеменнÑÑ Ð´Ð»Ñ Ð²Ð°ÑÐ¸Ñ [.filename]#rc.d# ÑкÑипÑов, еÑли они взаимозавиÑимÑ. + +ÐÑли вам вÑÑ ÐµÑÑ Ð½Ðµ обойÑиÑÑ Ð±ÐµÐ· `force_depend`, в пÑимеÑе показано, как вÑзваÑÑ ÐµÐ³Ð¾ ÑÑловно. РпÑимеÑе Ð½Ð°Ñ Ð´ÐµÐ¼Ð¾Ð½ `mumbled` ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð´ÑÑгой демон, `frotz`, бÑл запÑÑен заÑанее. Ðднако `frotz` Ñакже ÑвлÑеÑÑÑ Ð¾Ð¿ÑионалÑнÑм, и man:rcorder[8] ниÑего не Ð·Ð½Ð°ÐµÑ Ð¾ ÑÐ°ÐºÐ¸Ñ Ð´ÐµÑалÑÑ . Ð ÑÑаÑÑÑÑ, Ð½Ð°Ñ ÑкÑÐ¸Ð¿Ñ Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑп ко вÑем пеÑеменнÑм man:rc.conf[5]. ÐÑли `frotz_enable` Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение true, Ð¼Ñ Ð½Ð°Ð´ÐµÐµÐ¼ÑÑ Ð½Ð° лÑÑÑее и полагаемÑÑ Ð½Ð° [.filename]#rc.d#, ÑÑо `frotz` бÑл запÑÑен. РпÑоÑивном ÑлÑÑае Ð¼Ñ Ð¿Ñин ÑдиÑелÑно пÑовеÑÑем ÑÑаÑÑÑ `frotz`. ÐаконеÑ, Ð¼Ñ Ð¿ÑинÑдиÑелÑно ÑÑÑанавливаем завиÑимоÑÑÑ Ð¾Ñ `frotz`, еÑли обнаÑÑжиР²Ð°ÐµÐ¼, ÑÑо он не запÑÑен. `force_depend` вÑдаÑÑ Ð¿ÑедÑпÑеждение, Ñак как его ÑледÑÐµÑ Ð²ÑзÑваÑÑ ÑолÑко в ÑлÑÑае обнаÑÑÐ¶ÐµÐ½Ð¸Ñ Ð½ÐµÐ¿ÑавилÑной конÑигÑÑаÑии. + +[[rcng-args]] +== ÐÑидание болÑÑей гибкоÑÑи ÑкÑипÑÑ rc.d + +ÐÑи вÑзове во вÑÐµÐ¼Ñ Ð·Ð°Ð¿ÑÑка или завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ ÑкÑÐ¸Ð¿Ñ [.filename]#rc.d# должен воздейÑÑвоваÑÑ Ð½Ð° вÑÑ Ð¿Ð¾Ð´ÑиÑÑемÑ, за коÑоÑÑÑ Ð¾Ð½ оÑвеÑаеÑ. ÐапÑимеÑ, [.filename]#/etc/rc.d/netif# должен запÑÑкаÑÑ Ð¸Ð»Ð¸ оÑÑанавливаÑÑ Ð²Ñе ÑеÑевÑе инÑеÑÑейÑÑ, опиÑаннÑе в man:rc.conf[5]. ÐÑÐ±Ð°Ñ Ð¸Ð· ÑÑÐ¸Ñ Ð·Ð°Ð´Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñно Ñказана единÑÑвеннÑм аÑгÑменÑом командÑ, Ñаким как `start` или `stop`. ÐÐµÐ¶Ð´Ñ Ð·Ð°Ð¿ÑÑком и завеÑÑением ÑабоÑÑ ÑкÑипÑÑ [.filename]#rc.d# помогаÑÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑÑ ÑпÑавлÑÑÑ Ñ Ð°Ð±Ð¾ÑаÑÑей ÑиÑÑемой, и именно Ñогда Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¿Ð¾ÑÑебноÑÑÑ Ð² болÑÑей гибкоÑÑи и ÑоÑноÑÑи. ÐапÑимеÑ, админиÑÑÑ Ð°ÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð½Ð°ÑÑÑойки нового ÑеÑевого инÑеÑÑейÑа в man:rc.conf[5], а заÑем запÑÑÑиÑÑ ÐµÐ³Ð¾, не заÑÑÐ°Ð³Ð¸Ð²Ð°Ñ ÑабоÑÑ ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ð¸Ð½ÑеÑÑейÑов. Ð ÑледÑÑÑий Ñаз админиÑÑÑаÑоÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð¾ÑÑановиÑÑ Ð¾ÑделÑнÑй ÑеÑевой инÑеÑÑейÑ. РдÑÑ Ðµ командной ÑÑÑоки, ÑооÑвеÑÑÑвÑÑÑий ÑкÑÐ¸Ð¿Ñ [.filename]#rc.d# ÑÑебÑÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑного аÑгÑменÑа â имени инÑеÑÑейÑа. + +Ð ÑÑаÑÑÑÑ, man:rc.subr[8] позволÑÐµÑ Ð¿ÐµÑедаваÑÑ Ð»Ñбое колиÑеÑÑво аÑгÑменÑов (в пÑÐµÐ´ÐµÐ»Ð°Ñ ÑиÑÑемнÑÑ Ð¾Ð³ÑаниÑений) меÑодам ÑкÑипÑа. ÐлагодаÑÑ ÑÑÐ¾Ð¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ñамом ÑкÑипÑе могÑÑ Ð±ÑÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑми. + +Ðак man:rc.subr[8] Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп к дополниÑелÑнÑм аÑгÑменÑам командной ÑÑÑоки. Ðолжен ли он пÑоÑÑо Ð·Ð°Ñ Ð²Ð°ÑÑваÑÑ Ð¸Ñ Ð½Ð°Ð¿ÑÑмÑÑ? Ðи в коем ÑлÑÑае. Ðо-пеÑвÑÑ , ÑÑнкÑÐ¸Ñ man:sh[1] не Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑпа к позиÑионнÑм паÑамеÑÑам Ñвоего вÑзÑваÑÑего обÑекÑа, но man:rc.subr[8] â ÑÑо пÑоÑÑо Ð½Ð°Ð±Ð¾Ñ ÑÐ°ÐºÐ¸Ñ ÑÑнкÑий. Ðо-вÑоÑÑÑ , Ñ Ð¾ÑоÑий ÑÑÐ¸Ð»Ñ [.filename]#rc.d# пÑедпиÑÑваеÑ, ÑÑо именно главнÑй ÑкÑÐ¸Ð¿Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑеÑаÑÑ, какие аÑгÑменÑÑ Ð¿ÐµÑедаваÑÑ ÐµÐ³Ð¾ меÑодам. + +ÐÑак, Ð¿Ð¾Ð´Ñ Ð¾Ð´, пÑинÑÑÑй в man:rc.subr[8], ÑледÑÑÑий: `run_rc_command` пеÑедаÑÑ Ð²Ñе Ñвои аÑгÑменÑÑ, кÑоме пеÑвого, в ÑооÑвеÑÑÑвÑÑÑий меÑод в неизменном виде. ÐеÑвÑй, опÑÑеннÑй аÑгÑÐ¼ÐµÐ½Ñ â ÑÑо Ð¸Ð¼Ñ Ñамого меÑода: `start`, `stop` и Ñ.д. Ðн бÑÐ´ÐµÑ ÑдалÑн Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `shift` в `run_rc_command`, Ñак ÑÑо Ñо, ÑÑо бÑло `$2` в оÑигиналÑной командной ÑÑÑоке, бÑÐ´ÐµÑ Ð¿ÑедÑÑавлено как `$1` в меÑоде, и Ñак далее. + +ЧÑÐ¾Ð±Ñ Ð¿ÑоиллÑÑÑÑиÑоваÑÑ ÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ, давайÑе изменим пÑимиÑивнÑй ÑкÑипÑ-заглÑÑÐºÑ Ñак, ÑÑÐ¾Ð±Ñ ÐµÐ³Ð¾ ÑообÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸Ñели Ð¾Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¿ÐµÑеданнÑÑ Ð°ÑгÑменÑов. ÐÐ¾Ñ ÐºÐ°Ðº ÑÑо вÑглÑдиÑ: + +[.programlisting] +.... +#!/bin/sh + +. /etc/rc.subr + +name="dummy" +start_cmd="${name}_start" +stop_cmd=":" +kiss_cmd="${name}_kiss" +extra_commands="kiss" + +dummy_start() +{ + if [ $# -gt 0 ]; then <.> + echo "Greeting message: $*" + else + echo "Nothing started." + fi +} + +dummy_kiss() +{ + echo -n "A ghost gives you a kiss" + if [ $# -gt 0 ]; then <.> + echo -n " and whispers: $*" + fi + case "$*" in + *[.!?]) + echo + ;; + *) + echo . + ;; + esac +} + +load_rc_config $name +run_rc_command "$@" <.> +.... + +Ðакие оÑновнÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ замеÑиÑÑ Ð² ÑкÑипÑе? + +➊ ÐÑе аÑгÑменÑÑ, коÑоÑÑе Ð²Ñ Ð²Ð²Ð¾Ð´Ð¸Ñе поÑле `start`, могÑÑ ÑÑаÑÑ Ð¿Ð¾Ð·Ð¸ÑионнÑми паÑамеÑÑами Ð´Ð»Ñ ÑооÑвеÑÑÑвÑÑÑего меÑода. ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ Ð¸Ñ Ð»ÑбÑм ÑпоÑобом в ÑооÑвеÑÑÑвии Ñ Ð½Ð°Ñей задаÑей, навÑками и пÑедпоÑÑениÑми. Ð ÑекÑÑем пÑимеÑе Ð¼Ñ Ð¿ÑоÑÑо пеÑедаем вÑе Ð¸Ñ Ð² man:echo[1] как Ð¾Ð´Ð½Ñ ÑÑÑÐ¾ÐºÑ Ð² ÑледÑÑÑей ÑÑÑоке â обÑаÑиÑе внимание на `$*` в двойнÑÑ ÐºÐ°Ð²ÑÑÐºÐ°Ñ . ÐÐ¾Ñ ÐºÐ°Ðº ÑепеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ вÑзÑваÑÑ ÑÑÐ¾Ñ ÑкÑипÑ: + +[source, shell] +.... +# /etc/rc.d/dummy start +Nothing started. + +# /etc/rc.d/dummy start Hello world! +Greeting message: Hello world! +.... + +➋ То же Ñамое оÑноÑиÑÑÑ Ðº лÑÐ±Ð¾Ð¼Ñ Ð¼ÐµÑодÑ, коÑоÑÑй пÑедоÑÑавлÑÐµÑ Ð½Ð°Ñ ÑкÑипÑ, не ÑолÑко к ÑÑандаÑÑномÑ. ÐÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ð»Ð¸ полÑзоваÑелÑÑкий меÑод Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ `kiss`, и он Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе аÑгÑменÑÑ Ð½Ðµ менÑÑе, Ñем `start`. ÐапÑимеÑ: + +[source, shell] +.... +# /etc/rc.d/dummy kiss +A ghost gives you a kiss. + +# /etc/rc.d/dummy kiss Once I was Etaoin Shrdlu... +A ghost gives you a kiss and whispers: Once I was Etaoin Shrdlu... +.... + +➌ ÐÑли Ð¼Ñ Ñ Ð¾Ñим пÑоÑÑо пеÑедаÑÑ Ð²Ñе дополниÑелÑнÑе аÑгÑменÑÑ Ð»ÑÐ±Ð¾Ð¼Ñ Ð¼ÐµÑодÑ, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ пÑоÑÑо замениÑÑ `"$@"` на `"$1"` в поÑледней ÑÑÑоке наÑего ÑкÑипÑа, где Ð¼Ñ Ð²ÑзÑваем `run_rc_command`. + +[IMPORTANT] +==== +ÐÑогÑаммиÑÑ man:sh[1] должен понимаÑÑ ÑонкÑÑ ÑазниÑÑ Ð¼ÐµÐ¶Ð´Ñ `$*` и `$@` как ÑпоÑобами обознаÑÐµÐ½Ð¸Ñ Ð²ÑÐµÑ Ð¿Ð¾Ð·Ð¸ÑионнÑÑ Ð¿Ð°ÑамеÑÑов. ÐÐ»Ñ Ð´ÐµÑалÑного обÑÑÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¾Ð±ÑаÑиÑеÑÑ Ðº Ñ Ð¾ÑоÑÐµÐ¼Ñ ÑÑководÑÑÐ²Ñ Ð¿Ð¾ напиÑÐ°Ð½Ð¸Ñ ÑкÑипÑов на man:sh[1]. _Ðе иÑполÑзÑйÑе_ ÑÑи вÑÑажениÑ, пока полноÑÑÑÑ Ð½Ðµ поймÑÑе Ð¸Ñ , Ñак как Ð¸Ñ Ð½ÐµÐ¿ÑавилÑное пÑименение пÑиведÑÑ Ðº ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½ÐµÐ½Ð°Ð´ÑжнÑÑ Ð¸ небезопаÑнÑÑ ÑкÑипÑов. +==== + +[NOTE] +==== +РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð² `run_rc_command` Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð¾Ñибка, коÑоÑÐ°Ñ Ð¼ÐµÑÐ°ÐµÑ ÐµÐ¼Ñ ÑÐ¾Ñ ÑанÑÑÑ Ð¸ÑÑ Ð¾Ð´Ð½Ñе гÑаниÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð°ÑгÑменÑами. То еÑÑÑ Ð°ÑгÑменÑÑ Ñ Ð²ÑÑÑоеннÑми пÑобелами могÑÑ Ð¾Ð±ÑабаÑÑваÑÑÑÑ Ð½ÐµÐºÐ¾ÑÑекÑно. ÐÑибка Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¸Ð·-за непÑавилÑного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ `$*`. +==== + +[[rcng-service-jails]] +== ÐодгоÑовка ÑкÑипÑа Ð´Ð»Ñ ÑеÑвиÑнÑÑ ÐºÐ»ÐµÑок + +СкÑипÑÑ, запÑÑкаÑÑие долго ÑабоÑаÑÑÑÑ ÑлÑжбÑ, Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑ Ð´Ð»Ñ ÑлÑжебнÑÑ ÐºÐ»ÐµÑок и Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾ÑÑавлÑÑÑÑÑ Ñ ÑооÑвеÑÑÑвÑÑÑей конÑигÑÑаÑией ÑеÑвиÑной клеÑки. + +ÐекоÑоÑÑе пÑимеÑÑ ÑкÑипÑов, коÑоÑÑе не Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка в ÑеÑвиÑной клеÑке: + +* лÑбой ÑкÑипÑ, коÑоÑÑй в команде start ÑолÑко изменÑÐµÑ Ð½Ð°ÑÑÑойки вÑемени вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿ÑогÑамм или ÑдÑа, +* или пÑÑаеÑÑÑ ÑÑо-Ñо ÑмонÑиÑоваÑÑ, +* или Ð½Ð°Ñ Ð¾Ð´Ð¸Ñ Ð¸ ÑдалÑÐµÑ ÑÐ°Ð¹Ð»Ñ + +ÐÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ пÑедоÑвÑаÑиÑÑ Ð¸ÑполÑзование внÑÑÑи ÑеÑвиÑнÑÑ ÐºÐ»ÐµÑок ÑкÑипÑов, не пÑедназнаÑеннÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка в ÑеÑвиÑной клеÑке. + +СкÑÐ¸Ð¿Ñ Ñ Ð´Ð¾Ð»Ð³Ð¾ ÑабоÑаÑÑей ÑлÑжбой, коÑоÑÐ¾Ð¼Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑполниÑÑ Ð¾Ð´Ð½Ð¾ из пеÑеÑиÑленнÑÑ Ð²ÑÑе дейÑÑвий пеÑед запÑÑком или поÑле оÑÑановки, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑазделÑн на два ÑкÑипÑа Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑми или иÑполÑзоваÑÑ ÑаÑÑи `precommand` и `postcommand` ÑкÑипÑа Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑого дейÑÑвиÑ. + +Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑолÑко ÑаÑÑи `start` и `stop` ÑкÑипÑа вÑполнÑÑÑÑÑ Ð²Ð½ÑÑÑи ÑеÑвиÑной клеÑки, оÑÑалÑное вÑполнÑеÑÑÑ Ð²Ð½Ðµ клеÑки. Таким обÑазом, лÑбÑе наÑÑÑойки, иÑполÑзÑемÑе в ÑаÑÑÑÑ `start`/`stop` ÑкÑипÑа, не могÑÑ Ð±ÑÑÑ Ð·Ð°Ð´Ð°Ð½Ñ, напÑимеÑ, из `precommand`. + +ЧÑÐ¾Ð±Ñ ÑделаÑÑ ÑкÑÐ¸Ð¿Ñ Ð³Ð¾ÑовÑм к иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ extref:../../books/handbook/jails/#service-jails[СеÑвиÑнÑми ÐлеÑками], Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ добавиÑÑ Ð²Ñего Ð¾Ð´Ð½Ñ ÑÑÑÐ¾ÐºÑ ÐºÐ¾Ð½ÑигÑÑаÑии: + +[.programlisting] +.... +#!/bin/sh + +. /etc/rc.subr + +name="dummy" +start_cmd="${name}_start" +stop_cmd=":" + +: ${dummy_svcj_options:=""} <.> + +dummy_start() +{ + echo "Nothing started." +} + +load_rc_config $name +run_rc_command "$1" +.... + +➊ ÐÑли Ð¸Ð¼ÐµÐµÑ ÑмÑÑл, ÑÑÐ¾Ð±Ñ ÑкÑÐ¸Ð¿Ñ Ð²ÑполнÑлÑÑ Ð² клеÑке, он должен имеÑÑ Ð¿ÐµÑеопÑеделÑемÑÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ ÑеÑвиÑнÑÑ ÐºÐ»ÐµÑок. ÐÑли ÐµÐ¼Ñ Ð½Ðµ ÑÑебÑеÑÑÑ Ð´Ð¾ÑÑÑп к ÑеÑи или лÑбÑм дÑÑгим ÑеÑÑÑÑам, коÑоÑÑе огÑаниÑÐµÐ½Ñ Ð² клеÑÐºÐ°Ñ , доÑÑаÑоÑно пÑÑÑой конÑигÑÑаÑии, как показано. + +СÑÑого говоÑÑ, пÑÑÑÐ°Ñ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð½Ðµ обÑзаÑелÑна, но она Ñвно ÑказÑваеÑ, ÑÑо ÑкÑÐ¸Ð¿Ñ Ð³Ð¾Ñов к ÑабоÑе Ñ ÑеÑвиÑнÑми клеÑками и не ÑÑебÑÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ ÑазÑеÑений Ð´Ð»Ñ ÐºÐ»ÐµÑок. ÐоÑÑÐ¾Ð¼Ñ Ð½Ð°ÑÑоÑÑелÑно ÑекомендÑеÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑакÑÑ Ð¿ÑÑÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð² Ñаком ÑлÑÑае. Ðаиболее ÑаÑпÑоÑÑÑанÑÐ½Ð½Ð°Ñ Ð¾Ð¿ÑÐ¸Ñ â "net_basic", коÑоÑÐ°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¸ÑполÑзоваÑÑ IPv4 и IPv6 адÑеÑа Ñ Ð¾ÑÑа. ÐÑе возможнÑе опÑии опиÑÐ°Ð½Ñ Ð² man:rc.conf[5]. + +ÐÑли наÑÑÑойка запÑÑка/оÑÑановки завиÑÐ¸Ñ Ð¾Ñ Ð¿ÐµÑеменнÑÑ Ð¸Ð· rc-ÑÑеймвоÑка (напÑимеÑ, заданнÑÑ Ð² man:rc.conf[5]), ÑÑо должно обÑабаÑÑваÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ``load_rc_config`` и ``run_rc_command``, а не внÑÑÑи precommand. + +ÐÑли по какой-Ñо пÑиÑине ÑкÑÐ¸Ð¿Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð¿ÑÑен внÑÑÑи ÑеÑвиÑной клеÑки, напÑимеÑ, поÑÐ¾Ð¼Ñ ÑÑо его невозможно запÑÑÑиÑÑ Ð¸Ð»Ð¸ Ð½ÐµÑ ÑмÑÑла запÑÑкаÑÑ ÐµÐ³Ð¾ в клеÑке, иÑполÑзÑйÑе ÑледÑÑÑее: + +[.programlisting] +.... +#!/bin/sh + +. /etc/rc.subr + +name="dummy" +start_cmd="${name}_start" +stop_cmd=":" + +dummy_start() +{ + echo "Nothing started." +} + +load_rc_config $name +dummy_svcj="NO" # does not make sense to run in a svcj <.> +run_rc_command "$1" +.... + +➊ ÐÑклÑÑение должно пÑоиÑÑ Ð¾Ð´Ð¸ÑÑ Ð¿Ð¾Ñле вÑзова ``load_rc_config``, инаÑе паÑамеÑÑ Ð¸Ð· man:rc.conf[5] Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑеопÑеделиÑÑ ÐµÐ³Ð¾. + +[[rcng-instancing]] +== ÐÑодвинÑÑÑе ÑÑенаÑии rc: запÑÑк неÑколÑÐºÐ¸Ñ ÑкземплÑÑов + +Ðногда полезно запÑÑкаÑÑ Ð½ÐµÑколÑко ÑкземплÑÑов ÑлÑжбÑ. ÐбÑÑно ÑÑебÑеÑÑÑ Ð¸Ð¼ÐµÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо запÑÑкаÑÑ/оÑÑанавливаÑÑ Ñакие ÑкземплÑÑÑ, а Ñакже имеÑÑ Ð¾ÑделÑнÑй Ñайл конÑигÑÑаÑии Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ из Ð½Ð¸Ñ . ÐаждÑй ÑкземплÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ запÑÑкаÑÑÑÑ Ð¿Ñи загÑÑзке, поÑле Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ñй ÑкземплÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ оÑÑаваÑÑÑÑ, и пÑи ÑÑом должен обновиÑÑÑÑ. + +ÐÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ rc-ÑкÑипÑа, коÑоÑÑй поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑо: + +[.programlisting] +.... +#!/bin/sh + +# +# PROVIDE: dummy +# REQUIRE: NETWORKING SERVERS +# KEYWORD: shutdown +# +# Add these following line to /etc/rc.conf.local or /etc/rc.conf +# to enable this service: +# +# dummy_enable (bool): Set it to YES to enable dummy on startup. +# Default: NO +# dummy_user (string): User account to run with. +# Default: www +# + +. /etc/rc.subr + +case $0 in <.> +/etc/rc*) + # during boot (shutdown) $0 is /etc/rc (/etc/rc.shutdown), + # so get the name of the script from $_file + name=$_file + ;; +*) + name=$0 + ;; +esac + +name=${name##*/} <.> +rcvar="${name}_enable" <.> +desc="Short description of this service" +command="/usr/local/sbin/dummy" + +load_rc_config "$name" + +eval "${rcvar}=\${${rcvar}:-'NO'}" <.> +eval "${name}_svcj_options=\${${name}_svcj_options:-'net_basic'}" <.> +eval "_dummy_user=\${${name}_user:-'www'}" <.> + +_dummy_configname=/usr/local/etc/${name}.cfg <.> +pidfile=/var/run/dummy/${name}.pid +required_files ${_dummy_configname} +command_args="-u ${_dummy_user} -c ${_dummy_configfile} -p ${pidfile}" + +run_rc_command "$1" +.... + +➊ и ➋ ÑбедиÑеÑÑ, ÑÑо пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ name ÑÑÑановлена в знаÑение man:basename[1] имени ÑкÑипÑа. ÐÑли Ð¸Ð¼Ñ Ñайла â [.filename]#/usr/local/etc/rc.d/dummy#, Ñо name бÑÐ´ÐµÑ ÑÑÑановлено в [.filename]#dummy#. Таким обÑазом, изменение имени rc-ÑкÑипÑа авÑомаÑиÑеÑки Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ ÑодеÑжимое пеÑеменной name. + +➌ ÑказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ Ð¿ÐµÑеменной, коÑоÑÐ°Ñ Ð¸ÑполÑзÑеÑÑÑ Ð² [.filename]#rc.conf# Ð´Ð»Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ ÑÑой ÑлÑÐ¶Ð±Ñ Ð½Ð° оÑнове имени Ñайла ÑÑого ÑкÑипÑа. Рданном пÑимеÑе ÑÑо пÑеобÑазÑеÑÑÑ Ð² dummy_enable. + +➍ ÑбеждаеÑÑÑ, ÑÑо знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿ÐµÑеменной _enable ÑÑÑановлено в NO. + +➎ ÐÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ ÑÑÑановки некоÑоÑÑÑ Ð·Ð½Ð°Ñений по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿ÐµÑеменнÑÑ ÑÑеймвоÑка, ÑпеÑиÑиÑнÑÑ Ð´Ð»Ñ ÑлÑжбÑ, в данном ÑлÑÑае â опÑий клеÑки ÑлÑжбÑ. + +➏ и ➐ ÑÑÑанавливаÑÑ Ð¿ÐµÑеменнÑе, внÑÑÑенние Ð´Ð»Ñ ÑкÑипÑа (обÑаÑиÑе внимание на подÑÑÑкивание в наÑале _dummy_user, ÑÑÐ¾Ð±Ñ Ð¾ÑлиÑаÑÑ ÐµÑ Ð¾Ñ dummy_user, коÑоÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð° в [.filename]#rc.conf#). + +ЧаÑÑÑ Ð² ➎ пÑедназнаÑена Ð´Ð»Ñ Ð¿ÐµÑеменнÑÑ , коÑоÑÑе не иÑполÑзÑÑÑÑÑ Ð²Ð½ÑÑÑи Ñамого ÑкÑипÑа, но иÑполÑзÑÑÑÑÑ Ð² ÑÐ°Ð¼ÐºÐ°Ñ rc. ÐÑе пеÑеменнÑе, коÑоÑÑе иÑполÑзÑÑÑÑÑ ÐºÐ°Ðº паÑамеÑÑÑ Ð² ÑкÑипÑе, пÑиÑваиваÑÑÑÑ Ð¾Ð±Ñей пеÑеменной, как в ➐, ÑÑÐ¾Ð±Ñ ÑпÑоÑÑиÑÑ Ð¸Ñ Ð¸ÑполÑзование (Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи вÑполнÑÑÑ eval пÑи каждом обÑаÑении). + +ÐÑÐ¾Ñ ÑкÑÐ¸Ð¿Ñ ÑепеÑÑ Ð±ÑÐ´ÐµÑ Ð²ÐµÑÑи ÑÐµÐ±Ñ Ð¿Ð¾-дÑÑгомÑ, еÑли ÑкÑÐ¸Ð¿Ñ Ð·Ð°Ð¿ÑÑка Ð¸Ð¼ÐµÐµÑ Ð´ÑÑгое имÑ. ÐÑо позволÑÐµÑ ÑоздаваÑÑ ÑимволÑнÑе ÑÑÑлки на него: + +[source, shell] +.... +# ln -s dummy /usr/local/etc/rc.d/dummy_foo +# sysrc dummy_foo_enable=YES +# service dummy_foo start +.... + +ÐÑÑепÑиведенное ÑÐ¾Ð·Ð´Ð°ÐµÑ ÑкземплÑÑ ÑлÑÐ¶Ð±Ñ dummy Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ dummy_foo. Ðн иÑполÑзÑÐµÑ Ð½Ðµ Ñайл конÑигÑÑаÑии [.filename]#/usr/local/etc/dummy.cfg#, а Ñайл конÑигÑÑаÑии [.filename]#/usr/local/etc/dummy_foo.cfg# (➐), и иÑполÑзÑÐµÑ PID-Ñайл [.filename]#/var/run/dummy/dummy_foo.pid# вмеÑÑо [.filename]#/var/run/dummy/dummy.pid#. + +СеÑвиÑÑ dummy и dummy_foo могÑÑ ÑпÑавлÑÑÑÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо дÑÑг Ð¾Ñ Ð´ÑÑга, пÑи ÑÑом ÑкÑÐ¸Ð¿Ñ Ð·Ð°Ð¿ÑÑка обновлÑеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки пÑи обновлении пакеÑа (благодаÑÑ ÑимволÑной ÑÑÑлке). ÐÑо не обновлÑÐµÑ ÑÑÑÐ¾ÐºÑ REQUIRE, поÑÑÐ¾Ð¼Ñ Ð½ÐµÑ Ð¿ÑоÑÑого ÑпоÑоба завиÑеÑÑ Ð¾Ñ ÐºÐ¾Ð½ÐºÑеÑного ÑкземплÑÑа. ЧÑÐ¾Ð±Ñ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ ÐºÐ¾Ð½ÐºÑеÑного ÑкземплÑÑа в поÑÑдке запÑÑка, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑоздаÑÑ ÐºÐ¾Ð¿Ð¸Ñ Ð²Ð¼ÐµÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑимволÑной ÑÑÑлки. ÐÑо пÑедоÑвÑаÑÐ°ÐµÑ Ð°Ð²ÑомаÑиÑеÑкое пÑименение и зменений в ÑкÑипÑе запÑÑка пÑи ÑÑÑановке обновлениÑ. + +[[rcng-furthur]] +== ÐополниÑелÑÐ½Ð°Ñ Ð»Ð¸ÑеÑаÑÑÑа + +[[lukem]]http://www.mewburn.net/luke/papers/rc.d.pdf[ÐÑигиналÑÐ½Ð°Ñ ÑÑаÑÑÑ ÐÑка ÐÑÑбеÑна] пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ Ð¾Ð±Ñий Ð¾Ð±Ð·Ð¾Ñ [.filename]#rc.d# и подÑобное обоÑнование пÑинÑÑÑÑ Ð¿Ñи его пÑоекÑиÑовании ÑеÑений. Рней пÑедÑÑавлено понимание вÑего ÑÑеймвоÑка [.filename]#rc.d# и его меÑÑа в ÑовÑеменной BSD-ÑиÑÑеме. + +[[manpages]]Ð ÑководÑÑва man:rc[8], man:rc.subr[8] и man:rcorder[8] подÑобно опиÑÑваÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½ÑÑ [.filename]#rc.d#. Ðез изÑÑÐµÐ½Ð¸Ñ ÑÑÐ¸Ñ ÑÑководÑÑв и обÑаÑÐµÐ½Ð¸Ñ Ðº ним пÑи напиÑании ÑобÑÑвеннÑÑ ÑкÑипÑов невозможно в полной меÑе иÑполÑзоваÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи [.filename]#rc.d#. + +ÐÑновнÑм иÑÑоÑником ÑабоÑÐ¸Ñ , жизненнÑÑ Ð¿ÑимеÑов ÑвлÑеÑÑÑ [.filename]#/etc/rc.d# в ÑабоÑаÑÑей ÑиÑÑеме. Ðго ÑодеÑжимое легко и пÑиÑÑно ÑиÑаÑÑ, поÑколÑÐºÑ Ð±Ð¾Ð»ÑÑинÑÑво ÑложнÑÑ Ð¼Ð¾Ð¼ÐµÐ½Ñов ÑкÑÑÑо глÑбоко в man:rc.subr[8]. Ðднако помниÑе, ÑÑо ÑкÑипÑÑ Ð² [.filename]#/etc/rc.d# бÑли напиÑÐ°Ð½Ñ Ð½Ðµ ангелами, поÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð¸ могÑÑ ÑодеÑжаÑÑ Ð¾Ñибки и неопÑималÑнÑе ÑеÑениÑ. ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе Ð¸Ñ ÑлÑÑÑиÑÑ! diff --git a/documentation/content/ru/articles/rc-scripting/_index.po b/documentation/content/ru/articles/rc-scripting/_index.po new file mode 100644 index 0000000000..eb6e3fab38 --- /dev/null +++ b/documentation/content/ru/articles/rc-scripting/_index.po @@ -0,0 +1,2771 @@ +# 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. +msgid "" +msgstr "" +"Project-Id-Version: FreeBSD Documentation VERSION\n" +"POT-Creation-Date: 2025-10-20 11:17+0300\n" +"PO-Revision-Date: 2025-09-27 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 Hash Value: 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: .abstract-title +#: documentation/content/en/articles/rc-scripting/_index.adoc:45 +msgid "Abstract" +msgstr "ÐнноÑаÑиÑ" + +#. type: .abstract-title +#: 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: .abstract-title +#: 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: .abstract-title +#: 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: .abstract-title +#: 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: .abstract-title +#: 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: .abstract-title +#: 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: .abstract-title +#: 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 " *** 2591 LINES SKIPPED ***