1. В сообществе нашего форума Вконтакте создан раздел по продаже электронных компонентов.
    Каждый может продать в нем свои залежавшиеся детали. Подробности здесь.

Туториал Демонизация программы в Linux

Тема в разделе "Linux", создана пользователем radioengineer, 18 май 2016.

  1. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.549
    Симпатии:
    352
    Адрес:
    Алматы
    Иногда бывает необходимость запускать написанные программы в виде демонов (сервисов). Вот и у меня возникла задача, написал под #raspberry pi программку на #c++, которая работает с приемником 433Мгц и принимает данные от датчиков. Вручную переписывать код под демона было лень, поэтому использовал #runit супервизор. Работать с runit очень просто, не буду касаться всех аспектов, дам лишь минимальные данные для быстрого запуска демона.
    Для того, чтобы начать работать с супервизором нужно его установить

    apt-get install runit

    Хорошей практикой является создание сервисов для runit в отдельном каталоге, а затем “включение” их в runit при помощи создания симлинка в /etc/service. Поэтому для начала создаем каталог под нашу скомпиллированную программу:

    mkdir -p /etc/sv/<имя каталога с программой>

    Далее создаем в каталоге исполняемый файл run, в котором пишем простой скрипт запуска нашей программы:

    touch /etc/sv/<имя каталога с программой>/run

    PHP:
    #!/bin/bash
    exec ./<имя файла скомпилированной программы>

    Далее делаем наш скрипт исполняемым:

    chmod +x /etc/sv/<имя каталога с программой>/run


    Вот и всё – полученный каталог с содержащимся в нём скриптом run и, предварительно скопированным в каталог бинарником вашей программы, уже является полноценным сервисом runit, но ещё не запущенным.
    Теперь давайте запустим сервис, для этого нужно лишь создать симлинк:

    ln -s /etc/sv/<имя каталога с программой> /etc/service

    Почти сразу же сервис будет запущен и начнет работать. Управлять новым сервисом очень просто:

    sv <action> <service>

    Наиболее часто используемые действия:
    • status – показать текущее состояние сервиса;
    • up – запустить сервис, если он остановлен, перезапускать в случае его завершения;
    • down – корректно завершить и остановить работающий сервис (посылает TERM и CONT, после завершения процесса не перезапускает его);
    • once – запустить сервис единоразово, если он остановлен, не перезапускать, если завершится;
    • terminate – корректно завершить сервис (отправить TERM);
    • kill – принудительно завершить сервис (отправить KILL);
    • pause – поставить на паузу выполнение сервиса (отправляет STOP);
    • continue – продолжить выполнение поставленного на паузу сервиса (CONT);
    • hangup – отправить HUP;
    • interrupt – отправить INT.
    На этом собственно все, пробуйте и пишите что получается.
     
    : linux, raspberry, runit

Поделиться этой страницей