powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus. Daemon/Service
25 сообщений из 39, страница 1 из 2
Lazarus. Daemon/Service
    #39900463
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дайти плиз пример работающего сервиса на лазаре.

Пример на который ссылаются в вики (cleandirs.lpr) и что идет в комплекте не работает.

procedure CleanDirsDaemonCreate(Sender: TObject);
procedure CleanDirsDaemonStart(Sender: TCustomDaemon; var OK: Boolean);
procedure CleanDirsDaemonStop(Sender: TCustomDaemon; var OK: Boolean);

При запуске из винды эти события тупо не срабатывают, хотя в службах пишет что все ОК.
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39900503
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

тут ( отсюда ) и тут смотрел?
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39900532
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
rgreat,

( отсюда ) смотрел?
Это - нет.

Ситуация похожая.

Но у меня "В общем, непонятно как, но проблема решена." пока не выходит.
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39900540
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

google://NSSM
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39900544
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

С костылями я и сам могу. Мне бы корректное решение.
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39900545
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Мне бы корректное решение.

NSSM - это и есть корректное решение.
rgreat
С костылями я и сам могу.

Костыли - это эти все твои CleanDirsDaemonCreate, которые почему-то не срабатывают. Почему так происходит? Почему нельзя было сделать на sigterm, как у людей? Зачем им надо было кровь из носу изобретать велик?
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39900582
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Но у меня "В общем, непонятно как, но проблема решена." пока не выходит.

если посмотреть буржуйский форум, там тоже сервисы на винде не работают. Хотя, по самой первой ссылке в статье выложен тестовый проект. У меня он на XP и win7 заработал (сервис надо вручную запустить и остановить). При компиляции только нужно поправить пути для лог-файла, если нет диска D:\ (если есть, можно готовый экзешник из архива запустить)
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39900919
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Дайти плиз пример работающего сервиса на лазаре.

Пример на который ссылаются в вики (cleandirs.lpr) и что идет в комплекте не работает.

procedure CleanDirsDaemonCreate(Sender: TObject);
procedure CleanDirsDaemonStart(Sender: TCustomDaemon; var OK: Boolean);
procedure CleanDirsDaemonStop(Sender: TCustomDaemon; var OK: Boolean);

При запуске из винды эти события тупо не срабатывают, хотя в службах пишет что все ОК.
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39900998
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
rgreat
Но у меня "В общем, непонятно как, но проблема решена." пока не выходит.

если посмотреть буржуйский форум, там тоже сервисы на винде не работают. Хотя, по самой первой ссылке в статье выложен тестовый проект. У меня он на XP и win7 заработал (сервис надо вручную запустить и остановить). При компиляции только нужно поправить пути для лог-файла, если нет диска D:\ (если есть, можно готовый экзешник из архива запустить)
Скомпилил, ничего не меняя.
Сервис инсталлится, запускается, но D:\log.txt не появляется.

http://rgreat.ru/tmp/Delphi/Devlaz.exe


MaratIsk
Красивый подход, жаль что также не работает.
Пришлось допилить чтоб компилировалось + добавил свой логгер.

Лог при старте из сервисов:
Код: plaintext
1.
2.
10.12.2019 21:29:49.423: Clearing Logs...
10.12.2019 21:29:49.424: RunApplication. StartService = -1, Installing = 0
10.12.2019 21:31:06.098: RunApplication End.

Проект и exe:
http://rgreat.ru/tmp/Delphi/Daemon.zip
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901004
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Костыли - это эти все твои CleanDirsDaemonCreate, которые почему-то не срабатывают. Почему так происходит? Почему нельзя было сделать на sigterm, как у людей? Зачем им надо было кровь из носу изобретать велик?

Это вопрос к разработчикам PFC/Lazarus.

Мопед не мой, я только разместил объяву.

Я только хотел иметь работающий "стандартно" кроссплатформенный код.

На дельфях я вон намонстрячил в подобном виде:

Posix.Daemon.pas
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
unit Posix.Daemon;

// http://blog.paolorossi.net/2017/09/04/building-a-real-linux-daemon-with-delphi-part-2/

// The standard location of syslog log is /var/log/syslog
// tail -f /var/log/syslog

interface

uses
  System.SysUtils,
  System.IOUtils,
  Posix.Stdlib,
  Posix.SysStat,
  Posix.SysTypes,
  Posix.Unistd,
  Posix.Signal,
  Posix.Fcntl,
  Log;

procedure InitDaemon;

var
  pid, sid: pid_t;
  fid: Integer;
  Running: Boolean;

const
  // Missing from linux/StdlibTypes.inc !!! <stdlib.h>
  EXIT_FAILURE = 1;
  EXIT_SUCCESS = 0;

implementation

// 1. If SIGTERM is received, shut down the daemon and exit cleanly.
// 2. If SIGHUP is received, reload the configuration files, if this applies.
procedure HandleSignals(SigNum: Integer); cdecl;
begin
  case SigNum of
    SIGTERM:
    begin
      Running := False;
    end;
    SIGHUP:
    begin
      StrToLog('daemon: reloading config');
      // Reload configuration
    end;
  end;
end;


procedure InitDaemon;
var
  idx: Integer;
const
  Debug = False;
  WriteStdOut = False;
  Sequrity = False;
  ChangeDir = False;
begin
  // If the parent process is the init process then the current process is already a daemon
  // Remarks: this check here
	if getppid() = 1 then
  begin
    if Debug then StrToLog('Nothing to do, I''m already a daemon');
    Exit; // already a daemon
  end;

  if Debug then StrToLog('before 1st fork() - original process');

  // Call fork(), to create a background process.
  pid := fork();

  if Debug then StrToLog('after 1st fork() - the child is born');

  if pid < 0 then
    raise Exception.Create('Error forking the process');

  // Call exit() in the first child, so that only the second
  // child (the actual daemon process) stays around
  if pid > 0 then
    Halt(EXIT_SUCCESS);

  if Debug then StrToLog('the parent is killed!');

  // This call will place the server in a new process group and session and
  // detaches its controlling terminal
  sid := setsid();
  if sid < 0 then
    raise Exception.Create('Impossible to create an independent session');

  if Debug then StrToLog('session created and process group ID set');

  // Catch, ignore and handle signals
  signal(SIGCHLD, TSignalHandler(SIG_IGN));
  signal(SIGHUP, HandleSignals);
  signal(SIGTERM, HandleSignals);

  if Debug then StrToLog('before 2nd fork() - child process');

  // Call fork() again, to be sure daemon can never re-acquire the terminal
  pid := fork();

  if Debug then StrToLog('after 2nd fork() - the grandchild is born');

  if pid < 0 then
    raise Exception.Create('Error forking the process');

  // Call exit() in the first child, so that only the second child
  // (the actual daemon process) stays around. This ensures that the daemon
  // process is re-parented to init/PID 1, as all daemons should be.
  if pid > 0 then
    Halt(EXIT_SUCCESS);
  if Debug then StrToLog('the 1st child is killed!');
  StrToLog('Daemon creation is done.');

  // Open descriptors are inherited to child process, this may cause the use
  // of resources unneccessarily. Unneccesarry descriptors should be closed
  // before fork() system call (so that they are not inherited) or close
  // all open descriptors as soon as the child process starts running

  idx:=0;
  if idx<>0 then;
  
  if not WriteStdOut then begin
    // Close all opened file descriptors (stdin, stdout and stderr)
    for idx := sysconf(_SC_OPEN_MAX) downto 0 do
      __close(idx);

    if Debug then StrToLog('file descriptors closed');

    // Route I/O connections to > dev/null

    // Open STDIN
    fid := __open('/dev/null', O_RDWR);
    // Dup STDOUT
    dup(fid);
    // Dup STDERR
    dup(fid);

    if Debug then StrToLog('stdin, stdout, stderr redirected to /dev/null');
  end;

  if Sequrity then begin
    // Set new file permissions:
    // most servers runs as super-user, for security reasons they should
    // protect files that they create, with unmask the mode passes to open(), mkdir()
    // Restrict file creation mode to 750
  	umask(027);
    if Debug then StrToLog('file permission changed to 750');
  end;

  if ChangeDir then begin
    // The current working directory should be changed to the root directory (/), in
    // order to avoid that the daemon involuntarily blocks mount points from being unmounted
    chdir('/');
    if Debug then StrToLog('changed directory to "/"');
  end;
end;

end.


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
uses
  {$IFDEF POSIX}
  Posix.Daemon,
  {$ENDIF }

begin
{$IF Defined(POSIX) and Defined(RELEASE)}
  InitDaemon;
{$ENDIF}


Я вот вот все никак не могу выбрать себе грабли.

1. Дельфя - это огромный плюс к совместимости со старым кодом и вообще инструмент гораздо более удобный в разработке.
Но там пока огромные грабли с графикой под линукс. FMX для графики полное говно, а работающих альтернатив - просто нет.
А графика нужна.
Вот сейчас аж BGRABitmap library пытаюсь прикрутить. Пока не выходит.

2. Лазарь имеет хорошую кроссплатформенность и удовлетворительную поддержку графики даже в headless linux.
Но он гораздо менее удобен в разработке. Имеет не юникодный RTL и хронический недостаток документации и примеров.
Часть функционала может внезапно глючить или не работать как задумано.
Ну и кол-во переделок сущестующего кода удручает.
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901025
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Скомпилил, ничего не меняя.
Сервис инсталлится, запускается, но D:\log.txt не появляется.

ты код внутри смотрел? :)

Сделай ручной тип запуска, затем запусти и останови сервис из панели. Потом ищи лог-файл там, где он должен быть
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901029
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
rgreat
Скомпилил, ничего не меняя.
Сервис инсталлится, запускается, но D:\log.txt не появляется.

ты код внутри смотрел? :)

Сделай ручной тип запуска, затем запусти и останови сервис из панели. Потом ищи лог-файл там, где он должен быть

Так и делал, ничего нет.

Мой exe-шник попробуй (выше).

Вдруг с моим PFC чего не то?
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901036
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Док
пропущено...

если посмотреть буржуйский форум, там тоже сервисы на винде не работают. Хотя, по самой первой ссылке в статье выложен тестовый проект. У меня он на XP и win7 заработал (сервис надо вручную запустить и остановить). При компиляции только нужно поправить пути для лог-файла, если нет диска D:\ (если есть, можно готовый экзешник из архива запустить)
Скомпилил, ничего не меняя.
Сервис инсталлится, запускается, но D:\log.txt не появляется.

http://rgreat.ru/tmp/Delphi/Devlaz.exe


MaratIsk
Красивый подход, жаль что также не работает.
Пришлось допилить чтоб компилировалось + добавил свой логгер.

Лог при старте из сервисов:
Код: plaintext
1.
2.
10.12.2019 21:29:49.423: Clearing Logs...
10.12.2019 21:29:49.424: RunApplication. StartService = -1, Installing = 0
10.12.2019 21:31:06.098: RunApplication End.

Проект и exe:
http://rgreat.ru/tmp/Delphi/Daemon.zip


НЕ РАБОТАЕТ - очень информативно :)
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901038
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaratIsk
НЕ РАБОТАЕТ - очень информативно :)
Я не зря приложил сорцы и логи.
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901072
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
FMX для графики полное говно, а работающих альтернатив - просто нет.
А графика нужна.

А crossvcl так и не взлетел?.. Я не пользовался, поэтому и спрашиваю.
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901075
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лазарь, конечно, корявоват местами и с отладкой там полный пец, но разработка идет весьма активно, и баги фиксятся.
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901122
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,

если быть честным, то и дельфи не сахар - просто большинство к нему привыкли, к лазарю тоже привыкаешь довольно быстро
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901246
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
rgreat
FMX для графики полное говно, а работающих альтернатив - просто нет.
А графика нужна.

А crossvcl так и не взлетел?.. Я не пользовался, поэтому и спрашиваю.
Там проблемы с совместимостью с консольными линуксами.
Например у меня на CentOS функции типа TextWidth падают.

Кроме того надо уйму библиотек ставить. Причем на разных дистрибутивах линя - разные наборы. Причем заранее понять какие - невозможно.
Ну и скорость работы оставляет желать лучшего.

На классической убунте с GUI мордой - все ок. Разве что медленнно.
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901255
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В консольном линухе с графиков в принципе все странно и сложно, как я понимаю.
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901293
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,

"странно и сложно" это имхо вообще девиз линукса.
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901294
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
FMX для графики полное говно
Под линукс или вообще?
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901295
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд
rgreat
FMX для графики полное говно
Под линукс или вообще?

Вообще.

Там на канвасе пикселей нет. Все в своих идиотских попугаях считается, размер которых зависит от фазы луны.

Нарисовать что-то качественно - это тот еще геморрой.
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901296
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Квейд
пропущено...
Под линукс или вообще?

Вообще.


Не согласен. Как тебе такое, илон маск?

https://store.steampowered.com/app/748940/Rise_of_Legions/

YouTube Video
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901298
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд
Не согласен. Как тебе такое, илон маск?

https://store.steampowered.com/app/748940/Rise_of_Legions/
Как игра в общем и целом "никак". Не в моем вкусе.

Это на FMX наваяли?
...
Рейтинг: 0 / 0
Lazarus. Daemon/Service
    #39901300
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11.12.2019 15:15, rgreat пишет:
> Это на FMX наваяли?

что в ГРАФИЧЕСКОМ движке игрухи может быть от обезьяны?!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus. Daemon/Service
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]