Difference between revisions of "Daemons and Services/ru"

From Free Pascal wiki
Jump to navigationJump to search
 
(17 intermediate revisions by 5 users not shown)
Line 7: Line 7:
 
Используя Free Pascal и Lazarus можно создавать демоны/службы в зависимости от платформы, используя пакет lazdaemon. Чтобы избежать конфликта имён с компонентами Delphi эти классы называются 'демонами' ('daemons').
 
Используя Free Pascal и Lazarus можно создавать демоны/службы в зависимости от платформы, используя пакет lazdaemon. Чтобы избежать конфликта имён с компонентами Delphi эти классы называются 'демонами' ('daemons').
  
'''Примечание:''' Поскольку материал данной статьи нацелен на кросс платформенное объяснение, то понятия «демон» и «служба» в ней означают одно и то же. Они не привязаны к какой либо ОС, если о том не оговорено заранее. Однако, необходимо понимать, что в разных ОС есть свои нюансы, которые могут быть не учтены в данной статье.
+
'''Примечание:''' Поскольку материал данной статьи нацелен на кроссплатформенное объяснение, то понятия «демон» и «служба» в ней означают одно и то же. Они не привязаны к какой-либо ОС, если о том не оговорено заранее. Однако, необходимо понимать, что в разных ОС есть свои нюансы, которые могут быть не учтены в данной статье.
  
 
=Установка LazDaemon=
 
=Установка LazDaemon=
  
 
Прежде чем начать разработку службы или демона, установите пакет lazdaemon. Это можно сделать двумя способами: либо через пункт меню «Пакет/Установка и удаление пакетов» (Components / Configure installed packages), либо путем указания lpk файла из папки: lazarus/components/daemon/lazdaemon.lpk.
 
Прежде чем начать разработку службы или демона, установите пакет lazdaemon. Это можно сделать двумя способами: либо через пункт меню «Пакет/Установка и удаление пакетов» (Components / Configure installed packages), либо путем указания lpk файла из папки: lazarus/components/daemon/lazdaemon.lpk.
Данный пакет устанавливает некоторые новые компоненты и элементы меню, в среде разработки (IDE).
+
Данный пакет устанавливает некоторые новые компоненты и элементы меню в среде разработки (IDE).
  
 
=Классы=
 
=Классы=
Line 18: Line 18:
 
==TCustomDaemon==
 
==TCustomDaemon==
  
Данный класс реализует основную работу службы (демона) и является потомком TDataModule. Программа может использовать несколько классов TCustomDaemons и/или их экземпляров одновременно в одном процессе. Иными словами использовать много поточность в своей работе.
+
Данный класс реализует основную работу службы (демона) и является потомком TDataModule. Программа может использовать несколько классов TCustomDaemon и/или их экземпляров одновременно в одном процессе. Иными словами использовать многопоточность в своей работе.
  
 
==TCustomDaemonApplication==
 
==TCustomDaemonApplication==
  
Класс TCustomApplication является потомком TCustomDaemon. Единственное отличие это класса от TCustomDaemon, что он работает под windows, пока не получит сигнал Stop или под linux до тех пор, пока не поступит сигнал TERM.
+
Класс TCustomApplication является потомком TCustomDaemon. Единственное отличие этого класса от TCustomDaemon, что он работает под windows, пока не получит сигнал Stop или под linux до тех пор, пока не поступит сигнал TERM.
  
 
==TDaemonMapper==
 
==TDaemonMapper==
Line 28: Line 28:
 
Этот компонент выполняет регистрацию службы в системе. Каждый экземпляр службы должен быть указан в свойстве '''DaemonDefs'''.
 
Этот компонент выполняет регистрацию службы в системе. Каждый экземпляр службы должен быть указан в свойстве '''DaemonDefs'''.
  
=Демоны(службы) - Пошаговая инструкция=
+
=Демоны(службы) - Пошаговая инструкция для ОС Windows=
  
 
*Когда демон запускается, ему могут быть переданы следующие параметры командной строки:
 
*Когда демон запускается, ему могут быть переданы следующие параметры командной строки:
 
+
**-i --install: регистрация демона в системе.
**-i --install: регистрация демона в системе. Данный параметр не доступен в unix.
+
**-u --uninstall: удаление регистрации демона в системе.
**-u --uninstall: удаление регистрации демона в системе. Данный параметр не доступен в unix.
 
 
**-r --run: запуск демона. Windows, как правило запускает службу автоматически.
 
**-r --run: запуск демона. Windows, как правило запускает службу автоматически.
 
+
*Создайте объект класса TDaemonMapper
*Создайте объект, класса TDaemonMapper
+
*Для каждого пункта в свойстве ''DaemonDefs'' создайте объект класса TCustomDaemon.
 
 
*Для каждого пункта в свойстве ''DaemonDefs'' создайте объект, класса TCustomDaemon.
 
 
 
 
*Зарегистрируйте, удалите регистрацию в системе или запустите каждый созданный объект.
 
*Зарегистрируйте, удалите регистрацию в системе или запустите каждый созданный объект.
 +
*Каждый объект запустится в своём собственном потоке. Дождитесь сигнала Stop или TERM для его завершения.
  
*Каждый объект запустится в своём собственном потоке. Дождитесь сигнала Stop или TERM для его завершения.
+
=Методы служб=
  
=Daemon Methods=
+
'''Примечание:''' Все методы должны возвратить ''True'' в случаи успешного выполнения.
  
 
==Start==
 
==Start==
  
Called when daemon should start. This method must return immediately with ''True''.
+
Вызывается при запуске демона.
  
 
==Stop==
 
==Stop==
  
Called when daemon should stop. This method must return immediately with ''True''.
+
Вызывается при остановке демона.
  
 
==Shutdown==
 
==Shutdown==
  
Called when daemon should be killed. This method must stop the daemon immediately and return with ''True''.
+
Вызывается при уничтожении службы. Данный метод должен остановить службу и вернуть ''True''. Он не работает под Linux. В Linux происходит уничтожение процесса демона без вызова данного метода.
This is not triggered under Linux. Linux simply kills the daemon.
 
  
 
==Pause==
 
==Pause==
  
Called when daemon should pause. This method must return immediately with ''True''.
+
Вызывается, когда служба должна перейти в состояние «Пауза». В Linux он не работает, поскольку приостановкой и продолжением работы демона управляет ядро через сигналы STOP и CONT.
Under Linux this is not triggered because the kernel stops the whole daemon on STOP and continues it on CONT.
 
  
 
==Continue==
 
==Continue==
  
Called when daemon should continue after a pause. This method must return immediately with ''True''.
+
Вызывается, когда служба возобновляет работу. Под Linux данный метод не работает.
Under Linux this is not triggered.
 
  
 
==Install==
 
==Install==
  
Called when daemon is registered as windows service. This method should return ''True'' on success.
+
Вызывается при регистрации службы в windows.
  
 
==Uninstall==
 
==Uninstall==
  
Called when daemon is unregistered as windows service. This method should return ''True'' on success.
+
Вызывается во время удаления службы из windows.
  
 
==AfterUnInstall==
 
==AfterUnInstall==
  
Called after daemon was unregistered as windows service. This method should return ''True'' on success.
+
Вызывается после удаления windows службы.
  
 
==HandleCustomCode==
 
==HandleCustomCode==
  
Called when a special signal was sent to the daemon. This method should return ''True'' on success.
+
Вызывается при получении специального сигнала от системы.
  
==Getting Started==
+
==Начало Работы==
Before you are able to create a Service or Daemon application you must first ensure that the Lazarus Daemon package "lazdaemon" is installed.  
+
Перед созданием службы или демона убедитесь, что пакет "lazdaemon" установлен в Lazarus.
  
=Example=
+
=Пример использования=
  
There is a simple example in examples/cleandir/. Read the README.txt.
+
В папке «examples/cleandir/», есть простой пример, демонстрирующий работу службы или демона. Прочтите README.txt для получения более подробной информации.
  
=Service Installation=
+
=Установка службы=
  
 
==Windows==
 
==Windows==
  
You can install the service by executing the process with the Install parameter.
+
Вы можете установить службу путем выполнения процесса с параметром Install.
Windows service manager will do the rest for you.
+
Диспетчер служб Windows сделает все остальное за вас.  
You can configure the service and it's options from the service manager.
+
Вы можете настроить службу и её опции в диспетчере служб (service manager).
  
==Linux (Debian)==
 
  
Download, configure, and "Save As" - the sample script located at [http://aurawin.com/lazarus/debian-service.sh Service Script].
+
См. также: [[ServiceManager]]
  
*SVC_ALIAS is the long description of your application
+
==Linux (только для старых дистрибутивов Debian)==
*SVC_FILENAME is the actual file name of your compiled service application
 
*SVC_DIR is the place your you copied the service application
 
*SVC_SERVICE_SCRIPT is the final name of the service.sh when you "Save As" the customized debian-service.sh script.
 
  
Place your script in the /etc/init.d/ folder
+
Скачать, настроить, и "Сохранить как" - пример скрипта [http://aurawin.com/lazarus/debian-service.sh Service Script].
  
start the service by running "sudo service Name_Of_Your_Script start"
+
*SVC_ALIAS - полное описание вашего приложения
 +
*SVC_FILENAME - имя файла, скомпилированного приложения-службы
 +
*SVC_DIR - каталог, где находится приложение
 +
*SVC_SERVICE_SCRIPT - имя файла, под которым вы сохраните скрипт
  
 +
Разместите скрипт в папке /etc/init.d/
  
In order to auto-run the service at startup you can try update-rc.d or else will need a third party tool that will do this.
+
запустите службу, используя команду: "sudo service Имя_файла_с_скриптом start"
  
Option 1<syntaxhighlight>
+
Для того, чтобы автоматически запустить службу при загрузке системы, используйте update-rc.d или сторонние инструменты, каторые могут это сделать.
sudo update-rc.d Name_Of_Your_Script defaults
+
 
 +
Вариант 1:
 +
 
 +
<syntaxhighlight lang=pascal>
 +
sudo update-rc.d Имя_вашего_скрипта defaults
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Option 2<syntaxhighlight>
+
Вариант 2:
 +
 
 +
<syntaxhighlight lang=pascal>
 
sudo apt-get install chkconfig
 
sudo apt-get install chkconfig
sudo chkconfig --add Name_Of_Your_Script
+
sudo chkconfig --add Имя_вашего_скрипта
sudo chkconfig --level 2345 Name_Of_Your_Script on
+
sudo chkconfig --level 2345 Имя_вашего_скрипта on
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==Linux (Fedora)==
+
==systemd (Fedora, Debian, SLES12)==
Presently, linux flavors are trending away from differing daemon launching and into a unified service model.  
+
В настоящее время, Linux уходит от различий в способах запуска демонов в сторону единой модели служб.
  
Fedora uses systemd and with that commands to start/stop services are the same as on debian.
+
Fedora и SuSE Enterprise Linux Server 12 используют systemd и понимают те же команды запуска/остановки служб что и debian, однако есть различия в файлах конфигурации.
  
* From the command prompt sudo gedit
+
* Выполните из командной строки: sudo gedit
* Copy and Paste
+
* Скопируйте текст ниже:
<syntaxhighlight>
+
<syntaxhighlight lang="ini">
 
[Unit]
 
[Unit]
Description=Long description of your application
+
Description=Описание вашего приложения
 
After=network.target
 
After=network.target
  
 
[Service]
 
[Service]
 
Type=simple
 
Type=simple
ExecStart=complete_path_and_file_name -r
+
ExecStart=полный_путь_с_именем_файла -r
 
RemainAfterExit=yes
 
RemainAfterExit=yes
 
TimeoutSec=25
 
TimeoutSec=25
Line 148: Line 148:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
* Edit the following values
+
* Измените следующие значения
** Description - Long Description of your service application
+
** Description - полное описание вашей службы
** ExecStart - complete-path_and_file_name is the name of your compiled service application with its complete path
+
** ExecStart - имя файла с путем поиска скомпилированного приложения службы
 
 
* Save As Dialog
 
** Navigate to /lib/systemd/system/
 
** Name the file the name_of_your_service.service
 
  
 +
* В окне "Сохранить как"
 +
** Перейдите в /lib/systemd/system/
 +
** Сохраните файл с именем: имя_вашей_службы.service
  
A sample systemd config file can be found [http://aurawin.com/lazarus/fedora.service Service]
 
  
=See also=
+
Пример конфигурационного файла systemd, находится в: [http://aurawin.com/lazarus/fedora.service Service]
* [[ServiceManager]] Example for the FreePascal unit for managing Windows services
 
* [[Office Automation]]
 
  
[[Category:Tutorials]]
+
=Смотрите также=
[[Category:Lazarus]]
+
* [[ServiceManager]] - Пример модуля FreePascal для управления службами Windows
 +
* [[Office Automation/ru|Office Automation]] - Взаимодействие с офисным программным обеспечением

Latest revision as of 01:12, 9 January 2022

English (en) español (es) français (fr) polski (pl) português (pt) русский (ru)

Что такое демоны и службы?

Unix демоны и службы windows-программ, работают без взаимодействия с пользователем. Например, " " www"' или "'ftp"' серверы называются демонами под linux и службами под windows. Поскольку они не взаимодействуют с пользователем, они закрывают свои stdin, stdout, stderr дескрипторы при запуске.

Используя Free Pascal и Lazarus можно создавать демоны/службы в зависимости от платформы, используя пакет lazdaemon. Чтобы избежать конфликта имён с компонентами Delphi эти классы называются 'демонами' ('daemons').

Примечание: Поскольку материал данной статьи нацелен на кроссплатформенное объяснение, то понятия «демон» и «служба» в ней означают одно и то же. Они не привязаны к какой-либо ОС, если о том не оговорено заранее. Однако, необходимо понимать, что в разных ОС есть свои нюансы, которые могут быть не учтены в данной статье.

Установка LazDaemon

Прежде чем начать разработку службы или демона, установите пакет lazdaemon. Это можно сделать двумя способами: либо через пункт меню «Пакет/Установка и удаление пакетов» (Components / Configure installed packages), либо путем указания lpk файла из папки: lazarus/components/daemon/lazdaemon.lpk. Данный пакет устанавливает некоторые новые компоненты и элементы меню в среде разработки (IDE).

Классы

TCustomDaemon

Данный класс реализует основную работу службы (демона) и является потомком TDataModule. Программа может использовать несколько классов TCustomDaemon и/или их экземпляров одновременно в одном процессе. Иными словами использовать многопоточность в своей работе.

TCustomDaemonApplication

Класс TCustomApplication является потомком TCustomDaemon. Единственное отличие этого класса от TCustomDaemon, что он работает под windows, пока не получит сигнал Stop или под linux до тех пор, пока не поступит сигнал TERM.

TDaemonMapper

Этот компонент выполняет регистрацию службы в системе. Каждый экземпляр службы должен быть указан в свойстве DaemonDefs.

Демоны(службы) - Пошаговая инструкция для ОС Windows

  • Когда демон запускается, ему могут быть переданы следующие параметры командной строки:
    • -i --install: регистрация демона в системе.
    • -u --uninstall: удаление регистрации демона в системе.
    • -r --run: запуск демона. Windows, как правило запускает службу автоматически.
  • Создайте объект класса TDaemonMapper
  • Для каждого пункта в свойстве DaemonDefs создайте объект класса TCustomDaemon.
  • Зарегистрируйте, удалите регистрацию в системе или запустите каждый созданный объект.
  • Каждый объект запустится в своём собственном потоке. Дождитесь сигнала Stop или TERM для его завершения.

Методы служб

Примечание: Все методы должны возвратить True в случаи успешного выполнения.

Start

Вызывается при запуске демона.

Stop

Вызывается при остановке демона.

Shutdown

Вызывается при уничтожении службы. Данный метод должен остановить службу и вернуть True. Он не работает под Linux. В Linux происходит уничтожение процесса демона без вызова данного метода.

Pause

Вызывается, когда служба должна перейти в состояние «Пауза». В Linux он не работает, поскольку приостановкой и продолжением работы демона управляет ядро через сигналы STOP и CONT.

Continue

Вызывается, когда служба возобновляет работу. Под Linux данный метод не работает.

Install

Вызывается при регистрации службы в windows.

Uninstall

Вызывается во время удаления службы из windows.

AfterUnInstall

Вызывается после удаления windows службы.

HandleCustomCode

Вызывается при получении специального сигнала от системы.

Начало Работы

Перед созданием службы или демона убедитесь, что пакет "lazdaemon" установлен в Lazarus.

Пример использования

В папке «examples/cleandir/», есть простой пример, демонстрирующий работу службы или демона. Прочтите README.txt для получения более подробной информации.

Установка службы

Windows

Вы можете установить службу путем выполнения процесса с параметром Install. Диспетчер служб Windows сделает все остальное за вас. Вы можете настроить службу и её опции в диспетчере служб (service manager).


См. также: ServiceManager

Linux (только для старых дистрибутивов Debian)

Скачать, настроить, и "Сохранить как" - пример скрипта Service Script.

  • SVC_ALIAS - полное описание вашего приложения
  • SVC_FILENAME - имя файла, скомпилированного приложения-службы
  • SVC_DIR - каталог, где находится приложение
  • SVC_SERVICE_SCRIPT - имя файла, под которым вы сохраните скрипт

Разместите скрипт в папке /etc/init.d/

запустите службу, используя команду: "sudo service Имя_файла_с_скриптом start"

Для того, чтобы автоматически запустить службу при загрузке системы, используйте update-rc.d или сторонние инструменты, каторые могут это сделать.

Вариант 1:

sudo update-rc.d Имя_вашего_скрипта defaults

Вариант 2:

sudo apt-get install chkconfig
sudo chkconfig --add Имя_вашего_скрипта
sudo chkconfig --level 2345 Имя_вашего_скрипта on

systemd (Fedora, Debian, SLES12)

В настоящее время, Linux уходит от различий в способах запуска демонов в сторону единой модели служб.

Fedora и SuSE Enterprise Linux Server 12 используют systemd и понимают те же команды запуска/остановки служб что и debian, однако есть различия в файлах конфигурации.

  • Выполните из командной строки: sudo gedit
  • Скопируйте текст ниже:
[Unit]
Description=Описание вашего приложения
After=network.target

[Service]
Type=simple
ExecStart=полный_путь_с_именем_файла -r
RemainAfterExit=yes
TimeoutSec=25

[Install]
WantedBy=multi-user.target
  • Измените следующие значения
    • Description - полное описание вашей службы
    • ExecStart - имя файла с путем поиска скомпилированного приложения службы
  • В окне "Сохранить как"
    • Перейдите в /lib/systemd/system/
    • Сохраните файл с именем: имя_вашей_службы.service


Пример конфигурационного файла systemd, находится в: Service

Смотрите также

  • ServiceManager - Пример модуля FreePascal для управления службами Windows
  • Office Automation - Взаимодействие с офисным программным обеспечением