суббота, 17 июня 2017 г.

Создание сервиса в Linux

Иногда требуется не просто запустить программу, но и обеспечить ее работу, после перезагрузки, либо случайного падения. Можно в ручную следить за этим, но можно нужно, переложить эти заботы на откуп операционной системы. Для того чтобы сделать свою программу сервисом в Linux с использованием update-rc.d, достаточно выполнить следующее:

  • создать скрипт для управления жизненным циклом программы
  • назначить необходимые права на файл
  • зарегистрировать созданный скрипт как сервис
  • разрешить автозапуск сервиса

Как видим, шагов не так уж и много. И так начнем:

Создание скрипта

На первом шаге создадим файл в директории /etc/init.d/ с названием my-service

Шаблон скрипта выглядит следующим образом:

Данный шаблон предназначен для создания сервиса, запускающего скрипт из директории APPLICATION_PATH командой COMMAND. Для отслеживания состояния процесса потребуется так же PID_FILE, хранящий идентификатор запущенного процесса. Важно, чтобы программа, запускалась как демон и не выводила в консоль свои выходные данные, нужно после вызова дописать 2>&1 > /dev/null &

Из шаблона можно так же понять, что скрипт состоит из нескольких частей:

  • заголовок комментариев, со служебной информацией. Там, например указывается, от каких сервисов зависит данный сервис при старте/остановке, описание/название сервиса и тд.
  • главный case, обрабатывающий полученные скриптом команды.
  • функции реализующие команды: запуска, остановки, проверки статуса и тд.

Назначение прав

Здесь все просто, чтобы скрипт смог выполняться, нужно дать необходимые права для данного файла. Это делается следующей командой:

Регистрация скрипта как сервиса

Чтобы операционная система узнала о существовании нашего сервиса, потребуется его зарегистрировать. Для этого выполним команду:

Разрешить автозагрузку

Теперь наш сервис известен операционной системе, и с ним уже можно работать, например, запускать или останавливать:

Но, по умолчанию, после перезагрузки операционной системы, наша программа не будет работать. Для включения автозагрузки сервиса потребуется вызвать update-rc.d со следующими параметрами:

После этого, наш сервис полностью готов к работе 😉