Difference between revisions of "Daemons and Services/pl"

From Free Pascal wiki
Jump to navigationJump to search
(Kopia wersji en - wstępne tłumaczenie na j. polski)
 
m (→‎Demon - Krok po kroku: usunięty tekst en)
 
(20 intermediate revisions by the same user not shown)
Line 4: Line 4:
 
==Czym są demony, usługi i agenci?==
 
==Czym są demony, usługi i agenci?==
  
With Free Pascal, Lazarus it is possible to write these daemons/services platform-independent via the Lazarus lazdaemon package. To avoid name conflicts with the Delphi components these classes are called 'daemons'.
+
''Demony'' (ang. deamons) Uniksa i ''usługi'' (ang. services) Windows to programy działające w całym systemie bez interakcji użytkownika; ''Agenci'' (ang. agents) MacOS to programy dla użytkowników (porównaj demony ogólnosystemowe), które mogą działać z interakcją użytkownika lub bez niej. Chociaż nazewnictwo jest różne, ich funkcja jest podobna: na przykład serwery '''www''' lub '''ftp''' są nazywane demonami pod Linuksem, a usługami pod Windows. Ponieważ nie wchodzą w bezpośrednią interakcję z użytkownikiem, na początku zamykają swoje deskryptory stdin, stdout i stderr.
 +
 
 
Dzięki Free Pascal, Lazarus można pisać te demony/usługi niezależnie od platformy za pomocą pakietu Lazarus lazdaemon. Aby uniknąć konfliktów nazw z komponentami Delphi, klasy te nazywane są 'demonami' (daemons).
 
Dzięki Free Pascal, Lazarus można pisać te demony/usługi niezależnie od platformy za pomocą pakietu Lazarus lazdaemon. Aby uniknąć konfliktów nazw z komponentami Delphi, klasy te nazywane są 'demonami' (daemons).
  
 
== Instalacja LazDaemon ==
 
== Instalacja LazDaemon ==
  
Zanim zaczniesz, zainstaluj pakiet lazdemon. Albo przez Komponenty / Konfiguruj zainstalowane pakiety, albo przez otwarcie/instalację pliku lpk bezpośrednio: lazarus/components/daemon/lazdemon.lpk.
+
Zanim zaczniesz, zainstaluj pakiet lazdaemon. Albo przez menu Pakiet -> Instaluj/odinstaluj pakiety... i wybranie do z listy Pakietów do zainstalowania, albo przez otwarcie/instalację pliku lpk bezpośrednio ze cieżki z zainstalowanym Lazarusem: lazarus/components/daemon/lazdemon.lpk.
 
Ten pakiet instaluje kilka nowych komponentów i elementów menu w IDE:
 
Ten pakiet instaluje kilka nowych komponentów i elementów menu w IDE:
  
W menu '''Plik - Nowy:'''
+
W menu '''Plik - Nowy...:''', w oknie dialogowym pojawią się 3 nowe pozycje pod nagłówkiem: '''"Daemon (service) applications":'''
3 pozycje pojawiają się w oknie dialogowym, pod nagłówkiem: '''"Aplikacje Daemon(usług)":'''
+
* Daemon (service) applications
 +
* Daemon Module
 +
* Daemon mapper
  
 
== Klasy ==
 
== Klasy ==
Line 19: Line 22:
 
=== TCustomDaemon ===
 
=== TCustomDaemon ===
  
This is a TDataModule descendant that does all the work. There can be several TCustomDaemons classes and/or instances running at the same time and in the same process (multi threaded).
+
To jest potomek TDataModule, który wykonuje całą pracę. Może być kilka klas i/lub instancji TCustomDaemons działających w tym samym czasie i w tym samym procesie (wielowątkowym).
  
 
=== TCustomDaemonApplication ===
 
=== TCustomDaemonApplication ===
  
This is a TCustomApplication descendant which creates the TCustomDaemons. This does not need any change. It runs under Windows until it receives the Stop call or under Linux until the TERM signal.
+
To jest potomek klasy TCustomApplication, który tworzy TCustomDaemons. Nie wymaga on żadnych zmian. Działa w systemie Windows do momentu odebrania wywołania Stop lub w systemie Linux do sygnału TERM.
  
 
=== TDaemonMapper ===
 
=== TDaemonMapper ===
  
This component handles the service registration. Each instance needs one entry in the property '''DaemonDefs'''.
+
Ten składnik obsługuje rejestrację usługi. Każda jego instancja wymaga jednego wpisu we właściwości '''DaemonDefs'''.
  
== Daemon - Step by Step ==
+
== Demon - Krok po kroku ==
  
*When the daemon is started the command line parameters are parsed. The following are predefined:
+
*Gdy demon jest uruchamiany, analizowane są parametry wiersza poleceń. Wstępnie zdefiniowane są:
 +
**-i --install: zarejestruj demona. Nie ma to żadnego wpływu pod Uniksem.
 +
**-u --uninstall: wyrejestruj demona. Nie ma to żadnego wpływu pod Uniksem.
 +
**-r --run: uruchom demona. Windows zwykle robi to sam.
 +
*Utwórz TDaemonMapper
 +
*Utwórz jeden TCustomDaemon dla każdego wpisu ''DaemonDefs''.
 +
*instaluj, odinstaluj lub uruchom każdą instancję.
 +
*jeśli działa: uruchom każdą instancję we własnym wątku, a następnie poczekaj na sygnał Stop/TERM.
  
**-i --install: register the daemon. This has no effect under unix.
+
== Metody demona ==
**-u --uninstall: unregister the daemon. This has no effect under unix.
 
**-r --run: start the daemon. Windows does this normally itself.
 
  
*Create the TDaemonMapper
+
;Start: Wywoływana, gdy demon powinien się uruchomić. Ta metoda musi natychmiast zwrócić wartość ''True''.
*Create one TCustomDaemon for each entry of ''DaemonDefs''.
+
;Stop: Wywoływana, gdy demon powinien się zatrzymać. Ta metoda musi natychmiast zwrócić wartość ''True''.
*install, uninstall or run every instance.
+
;Shutdown: Wywoływana, gdy demon powinien zostać zabity. Ta metoda musi natychmiast zatrzymać demona i zwrócić wartość ''True''. Nie jest to uruchamiane pod Linuksem. Linux po prostu zabija demona.
*if run: start every instance in its own thread and then wait for Stop/TERM signal.
+
;Pause: Wywoływana, gdy demon powinien się zatrzymać. Ta metoda musi natychmiast zwrócić wartość ''True''. W Linuksie nie jest to uruchamiane, ponieważ jądro zatrzymuje całego demona na sygnał STOP i kontynuuje go na sygnał CONT.
 +
;Continue: Wywoływana, gdy demon powinien kontynuować pracę po przerwie. Ta metoda musi natychmiast zwrócić wartość ''True''. W Linuksie nie jest to uruchamiane.
 +
;Install: Wywoływana, gdy demon jest zarejestrowany jako usługa systemu Windows. Ta metoda powinna zwrócić wartość ''True'' w przypadku powodzenia.
 +
;Uninstall: Wywoływana, gdy demon jest wyrejestrowany jako usługa systemu Windows. Ta metoda powinna zwrócić wartość ''True'' w przypadku powodzenia.
 +
;AfterUnInstall: Wywoływana po tym, jak demon został wyrejestrowany jako usługa systemu Windows. Ta metoda powinna zwrócić wartość ''True'' w przypadku powodzenia.
 +
;HandleCustomCode: Wywoływana, gdy do demona został wysłany specjalny sygnał. Ta metoda powinna zwrócić wartość ''True'' w przypadku powodzenia.
  
== Daemon Methods ==
+
=== Pierwsze kroki ===
  
;Start: Called when daemon should start. This method must return immediately with ''True''.
+
Zanim będziesz mógł stworzyć aplikację Service lub Daemon, musisz najpierw upewnić się, że zainstalowałeś pakiet Lazarus Daemon "lazdemon".
;Stop: Called when daemon should stop. This method must return immediately with ''True''.
 
;Shutdown: Called when daemon should be killed. This method must stop the daemon immediately and return with ''True''. This is not triggered under Linux. Linux simply kills the daemon.
 
;Pause: Called when daemon should pause. This method must return immediately with ''True''. Under Linux this is not triggered because the kernel stops the whole daemon on STOP and continues it on CONT.
 
;Continue: Called when daemon should continue after a pause. This method must return immediately with ''True''. Under Linux this is not triggered.
 
;Install: Called when daemon is registered as a Windows service. This method should return ''True'' on success.
 
;Uninstall: Called when daemon is unregistered as a Windows service. This method should return ''True'' on success.
 
;AfterUnInstall: Called after daemon was unregistered as a Windows service. This method should return ''True'' on success.
 
;HandleCustomCode: Called when a special signal was sent to the daemon. This method should return ''True'' on success.
 
  
=== Getting Started ===
+
== Przykład==
  
Before you are able to create a Service or Daemon application you must first ensure that the Lazarus Daemon package "lazdaemon" is installed.
+
W katalogu examples/cleandir/ znajduje się prosty przykład. Przeczytaj README.txt.
  
== Example ==
+
== Instalacja usługi ==
  
There is a simple example in examples/cleandir/. Read the README.txt.
+
=== Windows ===
  
== Service Installation ==
+
Możesz zainstalować usługę, wykonując proces z parametrem Install.
 +
Menedżer usług Windows zrobi resztę za Ciebie.
 +
Możesz skonfigurować usługę i jej opcje za pomocą menedżera usług.
  
=== Windows ===
+
Zobacz także: [[ServiceManager/pl|Menedżer usług]]
  
You can install the service by executing the process with the Install parameter.
+
==== Kodowanie systemowe / UTF-8 ====
Windows service manager will do the rest for you. 
 
You can configure the service and its options from the service manager.
 
  
See also: [[ServiceManager]]
+
Projekt LazDeamon działa z domyślną stroną kodową, a nie UTF-8. Tryb ''-dDisableUTF8RTL'' należy aktywować za pomocą opcji z menu ''Projekt'' -> ''Opcje projektu...'' -> ''Opcje kompilatora'' -> ''Dodatki i wymuszenia'' -> ''Użyj kodowania systemowego''.
  
==== System codepage / UTF-8 ====
+
=== Linux (tylko dla starszych wersji Debiana) ===
A LazDeamon project is working with default, not UTF-8, codepage. The ''-dDisableUTF8RTL'' mode has to be activated with ''Project Options ...'' -> ''Compiler Options'' -> ''Additions and Overrides'' -> ''Use system encoding''.
 
  
=== Linux (only for older Debian) ===
+
Pobierz, skonfiguruj i "Zapisz jako" - przykładowy skrypt znajdujący się w Web Archive: [https://web.archive.org/web/20130209102726/http://aurawin.com/lazarus/debian-service.sh] ( Oryginalny link jest martwy od dłuższego czasu).
  
Download, configure, and "Save As" - the sample script located at Web Archive: [https://web.archive.org/web/20130209102726/http://aurawin.com/lazarus/debian-service.sh] (The original link is dead for a long time).
+
*SVC_ALIAS to długi opis Twojej aplikacji
 +
*SVC_FILENAME to rzeczywista nazwa pliku skompilowanej aplikacji usługi
 +
*SVC_DIR to miejsce, w którym skopiowałeś aplikację usługi
 +
*SVC_SERVICE_SCRIPT to ostateczna nazwa pliku service.sh stosowana w „Zapisz jako”, dostosowana do skryptu debian-service.sh.
  
*SVC_ALIAS is the long description of your application
+
Umieść swój skrypt w folderze /etc/init.d/
*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
+
uruchom usługę, za pomocą komendy "sudo service Name_Of_Your_Script start"
  
start the service by running "sudo service Name_Of_Your_Script start"
+
{{Note|sudo ma kilka odmian, np.:
 
 
{{Note|sudo has some variations, e.g.:  
 
 
  <br/>sudo -s #
 
  <br/>sudo -s #
 
  <br/>sudo -H #
 
  <br/>sudo -H #
Line 95: Line 97:
 
  <br/>sudo sh  #  }}
 
  <br/>sudo sh  #  }}
  
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.
+
Aby automatycznie uruchomić usługę przy starcie, możesz spróbować update-rc.d, w przeciwnym razie będziesz potrzebować narzędzia innej firmy, które to zrobi.
  
Option 1
+
Opcja 1
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
sudo update-rc.d Name_Of_Your_Script defaults
 
sudo update-rc.d Name_Of_Your_Script defaults
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Option 2
+
Opcja 2
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
sudo apt-get install chkconfig
 
sudo apt-get install chkconfig
Line 111: Line 113:
 
=== systemd (Fedora, Debian, SLES12) ===
 
=== systemd (Fedora, Debian, SLES12) ===
  
Presently, linux flavors are trending away from differing daemon launching and into a unified service model.  
+
Obecne odmiany Linuksa odchodzą od uruchamiania różnych demonów na rzecz ujednoliconego modelu usług.
  
Fedora and SuSE Enterprise Linux Server 12 use systemd and with that commands to start/stop services are the same as on debian but there are differences on the configuration files.
+
Fedora i SuSE Enterprise Linux Server 12 używają systemd, a polecenia uruchamiania/zatrzymywania usług są takie same jak w Debianie, ale istnieją różnice w plikach konfiguracyjnych.
  
* From the command prompt sudo gedit
+
* Z wiersza polecenia wykonaj: sudo gedit
* Copy and Paste
+
* Kopiuj i wklej poniższy kod
  
 
<syntaxhighlight lang="ini">
 
<syntaxhighlight lang="ini">
 
[Unit]
 
[Unit]
Description=Long description of your application
+
Description=Długi opis Twojej aplikacji
 
After=network.target
 
After=network.target
  
 
[Service]
 
[Service]
 
Type=simple
 
Type=simple
ExecStart=complete_path_and_file_name -r
+
ExecStart=pełna_ścieżka_i_nazwa_pliku -r
 
RemainAfterExit=yes
 
RemainAfterExit=yes
 
TimeoutSec=25
 
TimeoutSec=25
Line 133: Line 135:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
* Edit the following values
+
* Edytuj następujące wartości
** Description - Long Description of your service application
+
** Description - Długi opis aplikacji serwisowej
** ExecStart - complete-path_and_file_name is the name of your compiled service application with its complete path
+
** ExecStart — pełna ścieżka_i_nazwa_pliku to nazwa skompilowanej aplikacji usługi wraz z pełną ścieżką
 
 
* Save As Dialog
 
** Navigate to /lib/systemd/system/
 
** Name the file the name_of_your_service.service
 
  
== See also ==
+
* Zapisz jako okno dialogowe
 +
** Przejdź do /lib/systemd/system/
 +
** Nazwij plik nazwa_twojej_usługi.service
  
 +
== Zobacz także ==
  
* [[ServiceManager]] Example for the Free Pascal unit for managing Windows services
+
* [[ServiceManager/pl|Menedżer usług]] Przykład dla modułu Free Pascal do zarządzania usługami Windows
* [[macOS daemons and agents]] - macOS native using launchd
+
* [[macOS daemons and agents]] - macOS natywnie używający launchd
* [[Office Automation]]
+
* [[Office Automation]] - Interakcja z oprogramowaniem biurowym
* [https://www.freepascal.org/~michael/articles/daemons/daemons.pdf Taming the daemon: PDF by Michaël Van Canneyt]
+
* [https://www.freepascal.org/~michael/articles/daemons/daemons.pdf Oswajanie demona: PDF autorstwa Michaëla Van Canneyt]
* [http://forum.lazarus.freepascal.org/index.php/topic,22983.msg152303.html#msg152303 Useful discussion with small working daemon application]
+
* [http://forum.lazarus.freepascal.org/index.php/topic,22983.msg152303.html#msg152303 Przydatna dyskusja z małą działającą aplikacją demona]
* [[Docker Containerization]] - Containerization as a means to create daemons / services easily
+
* [[Docker Containerization]] - Konteneryzacja jako sposób na łatwe tworzenie demonów / usług

Latest revision as of 20:13, 9 January 2022

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

Demony i usługi

Czym są demony, usługi i agenci?

Demony (ang. deamons) Uniksa i usługi (ang. services) Windows to programy działające w całym systemie bez interakcji użytkownika; Agenci (ang. agents) MacOS to programy dla użytkowników (porównaj demony ogólnosystemowe), które mogą działać z interakcją użytkownika lub bez niej. Chociaż nazewnictwo jest różne, ich funkcja jest podobna: na przykład serwery www lub ftp są nazywane demonami pod Linuksem, a usługami pod Windows. Ponieważ nie wchodzą w bezpośrednią interakcję z użytkownikiem, na początku zamykają swoje deskryptory stdin, stdout i stderr.

Dzięki Free Pascal, Lazarus można pisać te demony/usługi niezależnie od platformy za pomocą pakietu Lazarus lazdaemon. Aby uniknąć konfliktów nazw z komponentami Delphi, klasy te nazywane są 'demonami' (daemons).

Instalacja LazDaemon

Zanim zaczniesz, zainstaluj pakiet lazdaemon. Albo przez menu Pakiet -> Instaluj/odinstaluj pakiety... i wybranie do z listy Pakietów do zainstalowania, albo przez otwarcie/instalację pliku lpk bezpośrednio ze cieżki z zainstalowanym Lazarusem: lazarus/components/daemon/lazdemon.lpk. Ten pakiet instaluje kilka nowych komponentów i elementów menu w IDE:

W menu Plik - Nowy...:, w oknie dialogowym pojawią się 3 nowe pozycje pod nagłówkiem: "Daemon (service) applications":

  • Daemon (service) applications
  • Daemon Module
  • Daemon mapper

Klasy

TCustomDaemon

To jest potomek TDataModule, który wykonuje całą pracę. Może być kilka klas i/lub instancji TCustomDaemons działających w tym samym czasie i w tym samym procesie (wielowątkowym).

TCustomDaemonApplication

To jest potomek klasy TCustomApplication, który tworzy TCustomDaemons. Nie wymaga on żadnych zmian. Działa w systemie Windows do momentu odebrania wywołania Stop lub w systemie Linux do sygnału TERM.

TDaemonMapper

Ten składnik obsługuje rejestrację usługi. Każda jego instancja wymaga jednego wpisu we właściwości DaemonDefs.

Demon - Krok po kroku

  • Gdy demon jest uruchamiany, analizowane są parametry wiersza poleceń. Wstępnie zdefiniowane są:
    • -i --install: zarejestruj demona. Nie ma to żadnego wpływu pod Uniksem.
    • -u --uninstall: wyrejestruj demona. Nie ma to żadnego wpływu pod Uniksem.
    • -r --run: uruchom demona. Windows zwykle robi to sam.
  • Utwórz TDaemonMapper
  • Utwórz jeden TCustomDaemon dla każdego wpisu DaemonDefs.
  • instaluj, odinstaluj lub uruchom każdą instancję.
  • jeśli działa: uruchom każdą instancję we własnym wątku, a następnie poczekaj na sygnał Stop/TERM.

Metody demona

Start
Wywoływana, gdy demon powinien się uruchomić. Ta metoda musi natychmiast zwrócić wartość True.
Stop
Wywoływana, gdy demon powinien się zatrzymać. Ta metoda musi natychmiast zwrócić wartość True.
Shutdown
Wywoływana, gdy demon powinien zostać zabity. Ta metoda musi natychmiast zatrzymać demona i zwrócić wartość True. Nie jest to uruchamiane pod Linuksem. Linux po prostu zabija demona.
Pause
Wywoływana, gdy demon powinien się zatrzymać. Ta metoda musi natychmiast zwrócić wartość True. W Linuksie nie jest to uruchamiane, ponieważ jądro zatrzymuje całego demona na sygnał STOP i kontynuuje go na sygnał CONT.
Continue
Wywoływana, gdy demon powinien kontynuować pracę po przerwie. Ta metoda musi natychmiast zwrócić wartość True. W Linuksie nie jest to uruchamiane.
Install
Wywoływana, gdy demon jest zarejestrowany jako usługa systemu Windows. Ta metoda powinna zwrócić wartość True w przypadku powodzenia.
Uninstall
Wywoływana, gdy demon jest wyrejestrowany jako usługa systemu Windows. Ta metoda powinna zwrócić wartość True w przypadku powodzenia.
AfterUnInstall
Wywoływana po tym, jak demon został wyrejestrowany jako usługa systemu Windows. Ta metoda powinna zwrócić wartość True w przypadku powodzenia.
HandleCustomCode
Wywoływana, gdy do demona został wysłany specjalny sygnał. Ta metoda powinna zwrócić wartość True w przypadku powodzenia.

Pierwsze kroki

Zanim będziesz mógł stworzyć aplikację Service lub Daemon, musisz najpierw upewnić się, że zainstalowałeś pakiet Lazarus Daemon "lazdemon".

Przykład

W katalogu examples/cleandir/ znajduje się prosty przykład. Przeczytaj README.txt.

Instalacja usługi

Windows

Możesz zainstalować usługę, wykonując proces z parametrem Install. Menedżer usług Windows zrobi resztę za Ciebie. Możesz skonfigurować usługę i jej opcje za pomocą menedżera usług.

Zobacz także: Menedżer usług

Kodowanie systemowe / UTF-8

Projekt LazDeamon działa z domyślną stroną kodową, a nie UTF-8. Tryb -dDisableUTF8RTL należy aktywować za pomocą opcji z menu Projekt -> Opcje projektu... -> Opcje kompilatora -> Dodatki i wymuszenia -> Użyj kodowania systemowego.

Linux (tylko dla starszych wersji Debiana)

Pobierz, skonfiguruj i "Zapisz jako" - przykładowy skrypt znajdujący się w Web Archive: [1] ( Oryginalny link jest martwy od dłuższego czasu).

  • SVC_ALIAS to długi opis Twojej aplikacji
  • SVC_FILENAME to rzeczywista nazwa pliku skompilowanej aplikacji usługi
  • SVC_DIR to miejsce, w którym skopiowałeś aplikację usługi
  • SVC_SERVICE_SCRIPT to ostateczna nazwa pliku service.sh stosowana w „Zapisz jako”, dostosowana do skryptu debian-service.sh.

Umieść swój skrypt w folderze /etc/init.d/

uruchom usługę, za pomocą komendy "sudo service Name_Of_Your_Script start"

Light bulb  Uwaga: sudo ma kilka odmian, np.:


sudo -s #
sudo -H #
sudo -i #
sudo su #

sudo sh #

Aby automatycznie uruchomić usługę przy starcie, możesz spróbować update-rc.d, w przeciwnym razie będziesz potrzebować narzędzia innej firmy, które to zrobi.

Opcja 1

sudo update-rc.d Name_Of_Your_Script defaults

Opcja 2

sudo apt-get install chkconfig
sudo chkconfig --add Name_Of_Your_Script
sudo chkconfig --level 2345 Name_Of_Your_Script on

systemd (Fedora, Debian, SLES12)

Obecne odmiany Linuksa odchodzą od uruchamiania różnych demonów na rzecz ujednoliconego modelu usług.

Fedora i SuSE Enterprise Linux Server 12 używają systemd, a polecenia uruchamiania/zatrzymywania usług są takie same jak w Debianie, ale istnieją różnice w plikach konfiguracyjnych.

  • Z wiersza polecenia wykonaj: sudo gedit
  • Kopiuj i wklej poniższy kod
[Unit]
Description=Długi opis Twojej aplikacji
After=network.target

[Service]
Type=simple
ExecStart=pełna_ścieżka_i_nazwa_pliku -r
RemainAfterExit=yes
TimeoutSec=25

[Install]
WantedBy=multi-user.target
  • Edytuj następujące wartości
    • Description - Długi opis aplikacji serwisowej
    • ExecStart — pełna ścieżka_i_nazwa_pliku to nazwa skompilowanej aplikacji usługi wraz z pełną ścieżką
  • Zapisz jako okno dialogowe
    • Przejdź do /lib/systemd/system/
    • Nazwij plik nazwa_twojej_usługi.service

Zobacz także