Перейти к содержанию
Fire Monkey от А до Я
  • 0

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


Евгений Корепов

Вопрос

Я написал класс для демонизации приложения в linux. Класс форкает процесс, обрабатывает поступающие сигналы и передает их в основной поток через потокобезопасную очередь.

Исходники https://github.com/EvgeniyKorepov/LinuxDaemon

Для использования просто подключите модуль UnitDaemon в свое консольное приложение:

program DaemonTest;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  System.IOUtils,
  System.SyncObjs,
  Posix.Stdlib,
  Posix.SysStat,
  Posix.SysTypes,
  Posix.Unistd,
  Posix.Signal,
  Posix.Fcntl,
  Posix.Syslog in 'Posix.Syslog.pas',
  UnitDaemon in 'UnitDaemon.pas';

var
  AEventType : TEventType;

begin
  syslog(LOG_NOTICE, 'main START');
  while True do
  begin
    syslog(LOG_NOTICE, 'main LOOP');
    if UnitDaemon.QueueEvent.PopItem(AEventType) = System.SyncObjs.TWaitResult.wrSignaled then
    begin
      syslog(LOG_NOTICE, 'main UnitDaemon.QueueEvent.PopItem');
      case AEventType of
        TEventType.StopProcess :
        begin
          syslog(LOG_NOTICE, 'main Event StopProcess');
          ExitCode := EXIT_SUCCESS;
          exit;
        end;
        TEventType.Start :
        begin
          syslog(LOG_NOTICE, 'main Event START');
        end;
        TEventType.Reload :
        begin
          // Reload config
          syslog(LOG_NOTICE, 'main Event RELOAD');
        end;
        TEventType.Stop :
        begin
          syslog(LOG_NOTICE, 'main Event STOP');
          ExitCode := EXIT_SUCCESS;
          exit;
        end;
      end;
    end;
    Sleep(50);
  end;
end.

Так же поддерживается systemd - для этого положите  DaemonTest.service в /etc/systemd/system/ и используйте :

systemctl start DaemonTest.service 
systemctl reload DaemonTest.service 
systemctl stop DaemonTest.service

 

Изменено пользователем Евгений Корепов
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

@Евгений Корепов

подскажи, у тебя под ubuntu 18.04 нормально работает? я пробовал другую похожую либу, с ней под debian приложение работает нормально, а вот под убунтой приложение при старте иногда зависает.

p.s. твой вариант еще не тестировал, поэтому и спрашиваю ?

Ссылка на комментарий
  • 0
10 часов назад, Tumaso сказал:

@Евгений Корепов

подскажи, у тебя под ubuntu 18.04 нормально работает? я пробовал другую похожую либу, с ней под debian приложение работает нормально, а вот под убунтой приложение при старте иногда зависает.

p.s. твой вариант еще не тестировал, поэтому и спрашиваю ?

У меня в досягаемости только CentOS 7, ну еще Дебиан есть на паре старых серваков. Под ними все работает превосходно. Тут надо под отладкой запускать и смотреть что происходит. Ну и логи системы смотреть

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...