Skip to content

EvgeniyKorepov/LinuxDaemonNewStyle

Repository files navigation

LinuxDaemonNewStyle

Linux Daemon new style

http://0pointer.de/public/systemd-man/daemon.html#New-Style%20Daemons

Example :

program DaemonNewStyleTest;

{$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',
  UnitDaemonNewStyle in 'UnitDaemonNewStyle.pas';

var
  AEvent : TEventType;

begin
  if ParamCount = 0 then
  begin
    syslog(LOG_ERR, 'No parameters');
    ExitCode := EXIT_FAILURE;
    exit;
  end;

  if ParamStr(1).ToLower.Equals('stop') then
  begin
    if Daemon.Stop(30) then
      ExitCode := EXIT_SUCCESS
    else
      ExitCode := EXIT_FAILURE;
    exit;
  end;
  if ParamStr(1).ToLower.Equals('reload') then
  begin
    if Daemon.Reload() then
      ExitCode := EXIT_SUCCESS
    else
      ExitCode := EXIT_FAILURE;
    exit;
  end;

  if not ParamStr(1).ToLower.Equals('start') then
  begin
    syslog(LOG_ERR, 'Unknow parameters');
    ExitCode := EXIT_FAILURE;
    exit;
  end;

  syslog(LOG_NOTICE, 'main START');
  while Daemon.IsRunning do
  begin
    syslog(LOG_NOTICE, 'main LOOP');
    Daemon.Execute(AEvent);
    if AEvent <> TEventType.None then
      syslog(LOG_NOTICE, 'main Daemon receive signal');
    case AEvent of
      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;
        Sleep(10); // simulate destroy delay
        break;
      end;
    end;
    Sleep(1000);
  end;
end.

Place DaemonNewStyleTest.service to /etc/systemd/system/ and use :

systemctl start DaemonNewStyleTest.service
systemctl reload DaemonNewStyleTest.service
systemctl stop DaemonNewStyleTest.service

About

Linux Daemon new style

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages