Как преобразовать скрипт sysv-init в задание Upstart?

Я хотел бы преобразовать slapd Сценарий инициализации сервера LDAP для службы Upstart. Тем не менее, я очень мало знаю о сценариях инициализации SysV (и о LSB(?)). В частности, я заинтересован в respawn Способность Upstart.

slapd Скрипт инициализации из Ubuntu 14.04 находится здесь. Сервис Upstart, который я придумал, находится здесь.

Достаточно ли я перенес вещей из скрипта sysv? Я сделал ошибки? Вещи, которые я не понял из сценария sysv, я не включил в работу Upstart. Может ли кто-нибудь объяснить мне этот скрипт sysv init?

Соответствующие файлы размещены на GitHub.


Фон:

У меня есть несколько серверов LDAP с N-way multi-master репликацией. Существует известная ошибка, которая может вызывать утечки памяти, приводя к slapd демоны иногда становятся жертвами OOM Killer.

Мои варианты включают в себя:

  1. Получение slapd возродиться (предмет этого вопроса).
  2. Использование более новой версии OpenLDAP (возможно, скомпилировано из исходного кода).
  3. Бросать больше оперативной памяти на сервер.

2 ответа

Ключевое слово LSB

Согласно LSBInitScripts:

 $remote_fs all filesystems are mounted. In some LSB run-time environments,
            filesystems such as /usr may be remote. If the script need a mounted 
            /usr/, it needs to depend on $remote_fs. Scripts depending on $remote_fs
            do not need to depend on $local_fs. During shutdown, scripts that need to
            run before sendsigs kills all processes should depend on $remote_fs. 

в то время как согласно справочной странице по удаленным файловым системам:

 When it occurs, local filesystems such as /usr may not be mounted.  
 For most normal services the  filesystem(7)  event  is sufficient.

Вы должны изменить удаленные файловые системы с событием файловой системы, которое:

 The  filesystem  event  is generated by the mountall(8) daemon after it
 has mounted all filesystems listed in fstab(5).

прочность

Проверка сценария инициализации SystemV $SLAPD_CONF, Если нет какого-либо типа конфигурации, скрипт не запускается, и остановка завершается с выходом 0, ничего не делая.

Эта проверка полезна в случае перезагрузки между этапом установки и этапом настройки или во время процедуры удаления. Чтобы понять его значение, вы должны проанализировать prerm а также postrm сценарии в /var/lib/dpkg/info,

Например prerm попытки остановить slapd, и если это не удастся, то процедура unistall тоже не удастся. остановка процедуры без файла конфигурации вернет 0, чтобы разрешить удаление OpenLDAP пакет, который установлен, но не настроен.

функция check_for_no_start() предотвратить начало выполнения на основе переменной $SLAPD_NO_START или, если существует файл $SLAPD_SENTINEL_FILE. Это простой способ временно отключить запуск slapd, для примеров для обслуживания. Даже если сервер перезагрузится, slapd не начнется.

функциональность

Сценарий SystemV создать $piddir (если не существует) и дает право разрешения $SLAPD_PIDFILE это необходимо, потому что slapd напишу пид в $SLAPD_PIDFILE,

Вы должны добавить это в pre_start скрипт.

Согласно странице руководства start-stop-daemon:

    -S, --start [--] arguments
              Check  for  the  existence  of  a  specified process.  If such a
              process exists, start-stop-daemon does nothing, and  exits  with
              error  status 1 (0 if --oknodo is specified).  If such a process
              does  not  exist,  it  starts  an  instance,  using  either  the
              executable  specified  by --exec or, if specified, by --startas.
              Any arguments given after -- on  the  command  line  are  passed
              unmodified to the program being started.

Вот почему вы должны удалить -- в команде slapd, как сказал CameronNemo.

Наконец-то на стоп есть вариант --retry TERM/10 это означает:

          schedule is a list of at least two items  separated  by  slashes
          (/);  each  item  may be -signal-number or [-]signal-name, which
          means to send that signal, or timeout, which means to wait  that
          many  seconds  for processes to exit, or forever, which means to
          repeat the rest of the schedule forever if necessary.

Я полагаю, что OpendLDAP нужно немного времени, чтобы завершить работу, поэтому вы должны добавить раздел kill timeout 10, который будет ждать 10 секунд (по умолчанию 5) для отправки slapd SIGKILL,

Я написал один здесь: https://bitbucket.org/CameronNemo/upstart-jobs/src/b5a709465304bdf420ca2507ed14f6fe67272de8/slapd.conf?at=master

Несколько ошибок, которые вы сделали:

  • Не должно быть никакого - между slapd и его параметрами.
  • Старт на событиях должен иметь and между ними.
  • виртуальные файловые системы должны перейти в файловую систему, как сказал Летиция.
Другие вопросы по тегам