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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

При запуске из винды эти события тупо не срабатывают, хотя в службах пишет что все ОК.
...
Рейтинг: 0 / 0
10.12.2019, 21:34
    #39900998
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lazarus. Daemon/Service
Док
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
10.12.2019, 21:58
    #39901004
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lazarus. Daemon/Service
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
11.12.2019, 00:40
    #39901025
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lazarus. Daemon/Service
rgreat
Скомпилил, ничего не меняя.
Сервис инсталлится, запускается, но D:\log.txt не появляется.

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

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

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

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

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

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

Вдруг с моим PFC чего не то?
...
Рейтинг: 0 / 0
11.12.2019, 04:02
    #39901036
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lazarus. Daemon/Service
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
11.12.2019, 05:06
    #39901038
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lazarus. Daemon/Service
MaratIsk
НЕ РАБОТАЕТ - очень информативно :)
Я не зря приложил сорцы и логи.
...
Рейтинг: 0 / 0
11.12.2019, 10:17
    #39901072
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lazarus. Daemon/Service
rgreat
FMX для графики полное говно, а работающих альтернатив - просто нет.
А графика нужна.

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

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

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

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

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

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

Вообще.

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

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

Вообще.


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

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

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

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

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

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


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