C.4. Восстановление и независимые деревья

В большей части промышленных окружений стандартный подход к восстановлению работоспособности службы при сбое одного из компонентов заключается в ее полном перезапуске. Пример C.6, «Восстановление foo после сбоя» демонстрирует ситуацию, когда при сбое одного сценария служба будет перезапущена, перенесена или отключена (в зависимости от политики восстановления). Однако некоторые компоненты могут расмматриваться как некритические, то есть не требуют перезапуска всей службы. Для этой цели предназначен атрибут __independent_subtree. Так Пример C.7, «Восстановление foo с определенным атрибутом __independent_subtree» иллюстрирует реализацию следующей логики с помощью __independent_subtree:
  • Если script:script_one завершается с ошибкой, перезапустить script:script_two и script:script_one.
  • Если script:script_two завершается с ошибкой, перезапустить just script:script_two.
  • Если script:script_three завершается с ошибкой, перезапустить script:script_one, script:script_two и script:script_three.
  • Если script:script_four завершается с ошибкой, полностью перезапустить службу.

Пример C.6. Восстановление foo после сбоя

<service name="foo">
      <script name="script_one" ...>
          <script name="script_two" .../>
      </script>
      <script name="script_three" .../>
</service>

Пример C.7. Восстановление foo с определенным атрибутом __independent_subtree

<service name="foo">
      <script name="script_one" __independent_subtree="1" ...>
          <script name="script_two" __independent_subtree="1" .../>
          <script name="script_three" .../>
      </script>
      <script name="script_four" .../>
</service>
В некоторых случаях при сбое одного компонента службы следует отключить только этот компонент и не останавливать службу целиком во избежание нарушения работы других служб, использующих ее компоненты.

Примечание

Только ресурсы, которые используются в рамках одной службы, могут быть отмечены как некритические. Некритический флаг работает с ресурсами на всех уровнях кроме верхнего (где определяются службы и виртуальные машины).
Начиная с Red Hat Enterprise Linux 6.1 в дереве ресурсов каждого узла можно определить дополнительные значения:
  • __max_restarts определяет максимальное число попыток перезапуска;
  • __restart_expire_time определяет время ожидания, по истечении которого попытки перезапуска будут прекращены.