Служба Windows самоперезапуск.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Служба Windows самоперезапуск.

Сообщение jsa » 04.10.2024 11:11:18

Здравствуйте.
Такой вопрос.
Есть ли способ службе windows сделать само-перезапуск? Или нужно запускать внешний батник через TProcess без poWaitOnExit с передачей PID в командной строке. И там уже обычным taskkill /F /PID %id% прибивать процесс и запускать по новой?
jsa
постоялец
 
Сообщения: 282
Зарегистрирован: 28.11.2017 13:46:04

Re: Служба Windows самоперезапуск.

Сообщение Sharfik » 04.10.2024 16:07:15

Вкладка "Восстановление" в свойствах службы.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: Служба Windows самоперезапуск.

Сообщение Alex2013 » 05.10.2024 23:58:23

Основная проблема в "сервисе/службе виндовс" в том что там нет хембела (Handle) окна(/приложения) и соответственно, все, что требует привязки к "родителю" работает через пень колоду и вроде бы TProcess не исключение .
Последний раз редактировалось Alex2013 22.10.2024 12:39:55, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: Служба Windows самоперезапуск.

Сообщение Снег Север » 06.10.2024 07:26:33

Alex2013 писал(а):Основная проблема в "службе виндовс" в том что там нет хембела (Handle) окна(/приложения) и соответственно, все, что требует привязки к "родителю" работает через пень колоду и вроде бы TProcess не исключение .

При прямых руках, это не проблема.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Служба Windows самоперезапуск.

Сообщение xchgeaxeax » 06.10.2024 08:49:39

А надо именно процесс убивать? Или же пойдет
Код: Выделить всё
sc stop "имя службы" && sc start "имя службы"
или по старинке
Код: Выделить всё
net stop /y "имя службы" && net start "имя службы"
или через PowerShell
Код: Выделить всё
powershell -command "Restart-Service <имя службы>"
xchgeaxeax
постоялец
 
Сообщения: 125
Зарегистрирован: 11.05.2023 03:51:40

Re: Служба Windows самоперезапуск.

Сообщение jsa » 07.10.2024 10:32:34

Sharfik писал(а):Вкладка "Восстановление" в свойствах службы.

Я не точно сформулировал.
Нужен программный перезапуск службы написанной на lazarus по условия. Саму себя перезапускать.
Видимо такого нет. Только через внешний батник.
jsa
постоялец
 
Сообщения: 282
Зарегистрирован: 28.11.2017 13:46:04

Re: Служба Windows самоперезапуск.

Сообщение MaratIsk » 07.10.2024 11:30:52

нонсенс какой-то?! служба для того и предназначена, чтобы работать круглосуточно. а если необходимо делать паузы, то sleep в руки
MaratIsk
постоялец
 
Сообщения: 117
Зарегистрирован: 20.08.2009 18:15:20

Re: Служба Windows самоперезапуск.

Сообщение xchgeaxeax » 07.10.2024 14:29:05

jsa писал(а):Я не точно сформулировал.
Нужен программный перезапуск службы написанной на lazarus по условия. Саму себя перезапускать.
Видимо такого нет. Только через внешний батник.

Просто не понятно зачем вам это? Память течет?
Если надо программно перезапуститься, тогда просто выполните программно процедуры stop/start указываемые при регистрации службы.
xchgeaxeax
постоялец
 
Сообщения: 125
Зарегистрирован: 11.05.2023 03:51:40

Re: Служба Windows самоперезапуск.

Сообщение sts » 07.10.2024 16:51:23

Кстати по поводу - память течет, использую для интеграции WebView4Delphi WebView2, таки да течет память, сначала стал периодически перегружать сайт в WebView, потом пересоздавать WebView, с каждым разом утечки уменьшались но все равно еще есть, что еще посоветуете?
сейчас снаружи перегружают
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Служба Windows самоперезапуск.

Сообщение Снег Север » 07.10.2024 18:03:43

Использовать Task Scheduler.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Служба Windows самоперезапуск.

Сообщение Ichthyander » 08.10.2024 17:00:25

Снег Север писал(а):Task Scheduler

Именно. Кстати, тогда и непонятно зачем именно служба WIndows. Если просто запустить, некоторое время поработать и закрыться... Службы и демоны на то они и есть, чтобы работать постоянно
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 686
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Служба Windows самоперезапуск.

Сообщение sts » 09.10.2024 10:13:38

ну очевидно если инициализация много времени занимает то лучше постоянно запущенную прогу иметь с очередью заданий, в моем случае непрерывная интеграция во много потоков, по идее надо написать прогу менеджер той кучки прог, руки еще не дошли. а вот почему утечка непонятно, конечно есть версия что движок хрома в принципе жадный до всех ресурсов, то есть поможет тока периодическая перезагрузка.
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Служба Windows самоперезапуск.

Сообщение jsa » 21.10.2024 11:13:30

xchgeaxeax писал(а):Просто не понятно зачем вам это? Память течет?

Нужна такая возможность чтобы перезапускать раз в указанный период или по событию. Служб у меня несколько, работают с разными внешними объектами файлы, API, железки.
Иногда теряют коннект с объектами. причины всегда разные и с ними надо разбираться. Но службы уже используются и остановки не должны случаться.
В 99,9% простой перезапуск решает вопрос с этими подключениями.
Само собой это не основной метод, и в каждом случае приходится разбираться и реализовывать "защиту от дурака" чтобы обойти проблему или отработать возникшее исключение.
Но для этого достаточно логов, а службу надо перезапустить.
Т.е. временная заглушка, страховка от прекращения работы.


xchgeaxeax писал(а):Если надо программно перезапуститься, тогда просто выполните программно процедуры stop/start указываемые при регистрации службы.


Службу я останавливаю когда нужно (если утерян-отключен объект для работы).
Код: Выделить всё
Application.StopDaemons(true);


Включить "снаружи" службу я могу, но интересует можно ли запустить после остановки изнутри
StopDaemons это процедура в unit daemonapp;
там же есть procedure RunDaemons;
но не понятно откуда ее задействовать, и возможно ли это.
jsa
постоялец
 
Сообщения: 282
Зарегистрирован: 28.11.2017 13:46:04

Re: Служба Windows самоперезапуск.

Сообщение xchgeaxeax » 21.10.2024 13:37:14

Код: Выделить всё
Program TestDaemon;

Uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
  CThreads,
{$ENDIF}{$ENDIF}
  DaemonApp, lazdaemonapp, daemonmapperunit, DaemonUnit, DaemonWorkerThread,
  DaemonSystemdInstallerUnit, MyDaemonApplicationTerminated
  { add your units here };

begin
  Application.Initialize;
  while not ApplicationTerminated do Application.Run;
end.

Код: Выделить всё
unit MyDaemonApplicationTerminated;

{$mode ObjFPC}{$H+}

interface

uses
  Classes, SysUtils;

var
  ApplicationTerminated: Boolean = False;

implementation

end.
Но можете определить и TMyDaemon как потомок TDaemon с добавкой в виде поля Terminated и перегрузкой работы Run

ЗЫ Только такой перезапуск не закроет потерянные хэндлы, если они не закроются вашей программой корректно и они могут у вас утекать.
xchgeaxeax
постоялец
 
Сообщения: 125
Зарегистрирован: 11.05.2023 03:51:40

Re: Служба Windows самоперезапуск.

Сообщение Alex2013 » 22.10.2024 10:37:34

Кстати, давно хотел спросить , сервис виндовс и служба виндовс это одно и тоже? И если да то можно ли использовать средства виндовс предназначенные для управления службами для контроля и обслуживания своего сервиса ?
Последний раз редактировалось Alex2013 22.10.2024 12:38:37, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

Рейтинг@Mail.ru