Difference between revisions of "Daemons and Services/pl"
(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?== | ||
− | + | ''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 | + | 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":''' |
− | + | * Daemon (service) applications | |
+ | * Daemon Module | ||
+ | * Daemon mapper | ||
== Klasy == | == Klasy == | ||
Line 19: | Line 22: | ||
=== TCustomDaemon === | === 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 === | === 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 === | === 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: [[ServiceManager/pl|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: [https://web.archive.org/web/20130209102726/http://aurawin.com/lazarus/debian-service.sh] ( 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" | |
− | + | {{Note|sudo ma kilka odmian, np.: | |
− | |||
− | {{Note|sudo | ||
<br/>sudo -s # | <br/>sudo -s # | ||
<br/>sudo -H # | <br/>sudo -H # | ||
Line 95: | Line 97: | ||
<br/>sudo sh # }} | <br/>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 | |
<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> | ||
− | + | 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) === | ||
− | + | Obecne odmiany Linuksa odchodzą od uruchamiania różnych demonów na rzecz ujednoliconego modelu usług. | |
− | Fedora | + | 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 |
<syntaxhighlight lang="ini"> | <syntaxhighlight lang="ini"> | ||
[Unit] | [Unit] | ||
− | Description= | + | Description=Długi opis Twojej aplikacji |
After=network.target | After=network.target | ||
[Service] | [Service] | ||
Type=simple | Type=simple | ||
− | ExecStart= | + | ExecStart=pełna_ścieżka_i_nazwa_pliku -r |
RemainAfterExit=yes | RemainAfterExit=yes | ||
TimeoutSec=25 | TimeoutSec=25 | ||
Line 133: | Line 135: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | * | + | * Edytuj następujące wartości |
− | ** Description - | + | ** Description - Długi opis aplikacji serwisowej |
− | ** ExecStart | + | ** 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 == | ||
− | * [[ServiceManager]] | + | * [[ServiceManager/pl|Menedżer usług]] Przykład dla modułu Free Pascal do zarządzania usługami Windows |
− | * [[macOS daemons and agents]] - macOS | + | * [[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 | + | * [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 | + | * [http://forum.lazarus.freepascal.org/index.php/topic,22983.msg152303.html#msg152303 Przydatna dyskusja z małą działającą aplikacją demona] |
− | * [[Docker Containerization]] - | + | * [[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) │
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"
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
- Menedżer usług Przykład dla modułu Free Pascal do zarządzania usługami Windows
- macOS daemons and agents - macOS natywnie używający launchd
- Office Automation - Interakcja z oprogramowaniem biurowym
- Oswajanie demona: PDF autorstwa Michaëla Van Canneyt
- Przydatna dyskusja z małą działającą aplikacją demona
- Docker Containerization - Konteneryzacja jako sposób na łatwe tworzenie demonów / usług