Index: hb-working-rcscripts.xml =================================================================== RCS file: /var/cvsroot/gentoo/xml/htdocs/doc/ru/handbook/hb-working-rcscripts.xml,v retrieving revision 1.7 diff -u -b -B -r1.7 hb-working-rcscripts.xml --- hb-working-rcscripts.xml 31 Mar 2006 07:41:50 -0000 1.7 +++ hb-working-rcscripts.xml 11 May 2007 21:36:24 -0000 @@ -9,8 +9,15 @@ -1.21 -2005-05-29 + +В Gentoo используется специальный формат сценариев запуска, который, вкупе с +другими возможностями, позволяет устанавливать зависимости и виртуальные уровни +запуска. В этой главе описываются все эти аспекты и пример управления подобными +сценариями. + + +1.23 +2007-03-07
Уровни запуска @@ -92,8 +99,9 @@

Если вы запомнили последовательность загрузки, описанную чуть ранее, вы -вспомните, что первое действие init — это монтирование всех файловых -систем. Это определяется в строке /etc/inittab, приведенной ниже: +вспомните, что первое действие init — это монтирование всех +файловых систем. Это определяется в строке /etc/inittab, +приведенной ниже:

@@ -549,6 +557,19 @@
 }
 
+

+Если ваш сервис должен иметь возможность записи на локальный диск, то ему +необходим localmount. Если они помещает что-либо в /var/run, +например pidfile, то он должен стартовать после bootmisc: +

+ +
+depend() {
+  need localmount
+  after bootmisc
+}
+
+ @@ -565,32 +586,81 @@
 start() {
   ebegin "Запуск - моя_служба"
-  start-stop-daemon --start --quiet --exec /path/to/my_service
+  start-stop-daemon --start --quiet --exec /path/to/my_service \
+    --pidfile /path/to/my_pidfile
   eend $?
 }
 

-Если вам нужны дополнительные примеры функции start(), пожалуйста, -прочитайте исходные коды сценариев инициализации, находящихся в каталоге -/etc/init.d. Что касается команды start-stop-daemon, то -на случай, если вам нужны дополнительные сведения, есть превосходная -страница справки: +И --exec, и --pidfile должны быть использованы в функциях старта +и останова. Если сервис не создает pidfile, то используйте, по возможности, +--make-pidfile, однако вам потребуется это проверить. Иначе не +используйте pidfile. Также вы можете добавить --quiet к параметрам +start-stop-daemon, но это не рекомендуется, если только сервис не +максимально проверен. Использование --quiet может скрыть отладочную +информацию в случае, если сервис не стартует нормально.

-
-# man start-stop-daemon
-
+ +Проверьте, что --exec на самом деле запускает сервис, а не сценарий +оболочки, который запускает сервисы и завершается — эту работу должен +делать сам сценарий запуска. + + +

+Если вам нужны примеры функции start(), обратитесь к исходному коду +доступных в каталоге /etc/init.d сценариев. +

Другими функциями, которые можно определить — stop() и -restart(). От вас не требуется определение этих функций! Система +restart(). Вам нет нужды определять эти функции! Система инициализации, применяемая нами, достаточно развита и в состоянии самостоятельно заполнить эти функции, если вы используете start-stop-daemon.

+Хотя вам не нужно создавать функцию stop(), вот ее пример: +

+ +
+stop() {
+  ebegin "Stopping my_service"
+  start-stop-daemon --stop --exec /path/to/my_service \
+    --pidfile /path/to/my_pidfile
+  eend $?
+}
+
+ +

+Если ваш сервис запускает другой сценарий (например, bash, python или perl), а +затем меняет свое имя (например, foo.py на foo), то вам нужно +добавить --name к start-stop-daemon. Вы должны указать имя, +которое будет использоваться в будущем. В данном примере, сервис запускается +с именем foo.py, которое затем сменяется на foo: +

+ +
+start() {
+  ebegin "Starting my_script"
+  start-stop-daemon --start --exec /path/to/my_script \
+    --pidfile /path/to/my_pidfile --name foo
+  eend $?
+}
+
+ +

+Если вам нужны дополнительные сведения, то у команды start-stop-daemon +есть превосходная страница справки: +

+ +
+# man start-stop-daemon
+
+ +

Синтаксис сценариев инициализации, применяемых в Gentoo, основан на оболочке Борна (Bourne Again Shell — bash), поэтому вы можете свободно использовать внутри своих сценариев bash-совместимые конструкции. @@ -703,6 +773,26 @@

+Хотя net.eth0 удалена из уровня запуска offline, udev все еще +будет пытаться запускать любые устройства, которые обнаружит в системе, и +стартовать подходящие сервисы. Поэтому добавьте сетевой сервис, запуск +которого вы хотите предотвратить (как и для любого сервиса, который может +запускать udev при обнаружении устройства) в /etc/conf.d/rc, как +показано ниже. +

+ +
+RC_COLDPLUG="yes"
+(Ниже укажите сервисы, которые не должны запускаться автоматически)
+RC_PLUG_SERVICES="!net.eth0"
+
+ + +Для большей информации о инициализации сервисов по устройствам читайте +комментарии внутри /etc/conf.d/rc. + + +

Теперь необходимо отредактировать конфигурацию загрузчика, добавив запись об уровне offline. Например, в файле /boot/grub/grub.conf:

@@ -737,11 +827,11 @@