Difference between revisions of "Daemons and Services/ru"
(14 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). |
=Классы= | =Классы= | ||
Line 18: | Line 18: | ||
==TCustomDaemon== | ==TCustomDaemon== | ||
− | Данный класс реализует основную работу службы (демона) и является потомком TDataModule. Программа может использовать несколько классов | + | Данный класс реализует основную работу службы (демона) и является потомком TDataModule. Программа может использовать несколько классов TCustomDaemon и/или их экземпляров одновременно в одном процессе. Иными словами использовать многопоточность в своей работе. |
==TCustomDaemonApplication== | ==TCustomDaemonApplication== | ||
− | Класс TCustomApplication является потомком TCustomDaemon. Единственное отличие | + | Класс TCustomApplication является потомком TCustomDaemon. Единственное отличие этого класса от TCustomDaemon, что он работает под windows, пока не получит сигнал Stop или под linux до тех пор, пока не поступит сигнал TERM. |
==TDaemonMapper== | ==TDaemonMapper== | ||
Line 28: | Line 28: | ||
Этот компонент выполняет регистрацию службы в системе. Каждый экземпляр службы должен быть указан в свойстве '''DaemonDefs'''. | Этот компонент выполняет регистрацию службы в системе. Каждый экземпляр службы должен быть указан в свойстве '''DaemonDefs'''. | ||
− | =Демоны(службы) - Пошаговая инструкция= | + | =Демоны(службы) - Пошаговая инструкция для ОС Windows= |
*Когда демон запускается, ему могут быть переданы следующие параметры командной строки: | *Когда демон запускается, ему могут быть переданы следующие параметры командной строки: | ||
− | + | **-i --install: регистрация демона в системе. | |
− | **-i --install: регистрация демона в системе | + | **-u --uninstall: удаление регистрации демона в системе. |
− | **-u --uninstall: удаление регистрации демона в системе | ||
**-r --run: запуск демона. Windows, как правило запускает службу автоматически. | **-r --run: запуск демона. Windows, как правило запускает службу автоматически. | ||
− | + | *Создайте объект класса TDaemonMapper | |
− | *Создайте объект | + | *Для каждого пункта в свойстве ''DaemonDefs'' создайте объект класса TCustomDaemon. |
− | |||
− | *Для каждого пункта в свойстве ''DaemonDefs'' создайте объект | ||
− | |||
*Зарегистрируйте, удалите регистрацию в системе или запустите каждый созданный объект. | *Зарегистрируйте, удалите регистрацию в системе или запустите каждый созданный объект. | ||
− | |||
*Каждый объект запустится в своём собственном потоке. Дождитесь сигнала Stop или TERM для его завершения. | *Каждый объект запустится в своём собственном потоке. Дождитесь сигнала Stop или TERM для его завершения. | ||
Line 85: | Line 80: | ||
==Начало Работы== | ==Начало Работы== | ||
− | Перед созданием службы или демона | + | Перед созданием службы или демона убедитесь, что пакет "lazdaemon" установлен в Lazarus. |
=Пример использования= | =Пример использования= | ||
Line 91: | Line 86: | ||
В папке «examples/cleandir/», есть простой пример, демонстрирующий работу службы или демона. Прочтите README.txt для получения более подробной информации. | В папке «examples/cleandir/», есть простой пример, демонстрирующий работу службы или демона. Прочтите README.txt для получения более подробной информации. | ||
− | = | + | =Установка службы= |
==Windows== | ==Windows== | ||
− | + | Вы можете установить службу путем выполнения процесса с параметром Install. | |
− | Windows | + | Диспетчер служб Windows сделает все остальное за вас. |
− | + | Вы можете настроить службу и её опции в диспетчере служб (service manager). | |
− | |||
− | + | См. также: [[ServiceManager]] | |
− | + | ==Linux (только для старых дистрибутивов Debian)== | |
− | |||
− | |||
− | |||
− | + | Скачать, настроить, и "Сохранить как" - пример скрипта [http://aurawin.com/lazarus/debian-service.sh Service Script]. | |
− | + | *SVC_ALIAS - полное описание вашего приложения | |
+ | *SVC_FILENAME - имя файла, скомпилированного приложения-службы | ||
+ | *SVC_DIR - каталог, где находится приложение | ||
+ | *SVC_SERVICE_SCRIPT - имя файла, под которым вы сохраните скрипт | ||
+ | Разместите скрипт в папке /etc/init.d/ | ||
− | + | запустите службу, используя команду: "sudo service Имя_файла_с_скриптом start" | |
− | + | Для того, чтобы автоматически запустить службу при загрузке системы, используйте update-rc.d или сторонние инструменты, каторые могут это сделать. | |
− | sudo update-rc.d | + | |
+ | Вариант 1: | ||
+ | |||
+ | <syntaxhighlight lang=pascal> | ||
+ | sudo update-rc.d Имя_вашего_скрипта defaults | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Вариант 2: | |
+ | |||
+ | <syntaxhighlight lang=pascal> | ||
sudo apt-get install chkconfig | sudo apt-get install chkconfig | ||
− | sudo chkconfig --add | + | sudo chkconfig --add Имя_вашего_скрипта |
− | sudo chkconfig --level 2345 | + | sudo chkconfig --level 2345 Имя_вашего_скрипта on |
</syntaxhighlight> | </syntaxhighlight> | ||
− | == | + | ==systemd (Fedora, Debian, SLES12)== |
− | + | В настоящее время, Linux уходит от различий в способах запуска демонов в сторону единой модели служб. | |
− | Fedora | + | Fedora и SuSE Enterprise Linux Server 12 используют systemd и понимают те же команды запуска/остановки служб что и debian, однако есть различия в файлах конфигурации. |
− | * | + | * Выполните из командной строки: sudo gedit |
− | * | + | * Скопируйте текст ниже: |
− | <syntaxhighlight> | + | <syntaxhighlight lang="ini"> |
[Unit] | [Unit] | ||
− | Description= | + | Description=Описание вашего приложения |
After=network.target | After=network.target | ||
[Service] | [Service] | ||
Type=simple | Type=simple | ||
− | ExecStart= | + | ExecStart=полный_путь_с_именем_файла -r |
RemainAfterExit=yes | RemainAfterExit=yes | ||
TimeoutSec=25 | TimeoutSec=25 | ||
Line 147: | Line 148: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | * | + | * Измените следующие значения |
− | ** Description - | + | ** Description - полное описание вашей службы |
− | ** ExecStart - | + | ** ExecStart - имя файла с путем поиска скомпилированного приложения службы |
− | |||
− | |||
− | |||
− | |||
+ | * В окне "Сохранить как" | ||
+ | ** Перейдите в /lib/systemd/system/ | ||
+ | ** Сохраните файл с именем: имя_вашей_службы.service | ||
− | |||
− | + | Пример конфигурационного файла systemd, находится в: [http://aurawin.com/lazarus/fedora.service Service] | |
− | |||
− | |||
− | [[ | + | =Смотрите также= |
− | [[ | + | * [[ServiceManager]] - Пример модуля FreePascal для управления службами Windows |
+ | * [[Office Automation/ru|Office Automation]] - Взаимодействие с офисным программным обеспечением |
Latest revision as of 02: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 - Взаимодействие с офисным программным обеспечением