Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pisanje systemd daemona :)

[es] :: Linux :: Pisanje systemd daemona :)

Strane: 1 2

[ Pregleda: 4040 | Odgovora: 30 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Pisanje systemd daemona :)06.03.2019. u 10:43 - pre 61 meseci
Sad je gotovo, sad cu da vas smaram neko vreme :)

Ok, hocu da napisem svoj daemon, cisto eksperimenta radi hocu da napravim chat server u C# .net core 3.0 preview kao proof of concept. Sad, ja pokrenem listener thread, ali sta radim sa glavnim threadom koji sam dobio od systemd launchera?

U Windows svetu kad pravim servis ja sam obavezan da javim SCMu (Service Control Manager) koji me je i pozvao da je servis "ziv" i da potom uradim return i vratim thread SCMu. Ako to ne uradim (obe stvari), SCM ili prsne odmah ili timeout-uje start operaciju i ubije servisni proces pretpostavljajuci da je pokretanje servisa prslo.

Kako systemd to resava? Ako ja ne uradim return kako on zna da je moj servis ziv? Ako pogledam moj servis za mount, vidim da je proces exited, ali ako npr pogledam neki sistemski servis:

Code:
mmix@BlackWolf:~/projects/Helios/HeliosServer/Helios.Server$ systemctl status accounts-daemon.service 
● accounts-daemon.service - Accounts Service
   Loaded: loaded (/lib/systemd/system/accounts-daemon.service; enabled; vendor 
   Active: active (running) since Wed 2019-03-06 08:19:22 CET; 3h 20min ago
 Main PID: 1356 (accounts-daemon)
    Tasks: 3 (limit: 4915)
   Memory: 7.5M
   CGroup: /system.slice/accounts-daemon.service
           └─1356 /usr/lib/accountsservice/accounts-daemon

Mar 06 08:19:22 BlackWolf systemd[1]: Starting Accounts Service...
Mar 06 08:19:22 BlackWolf accounts-daemon[1356]: started daemon version 0.6.45
Mar 06 08:19:22 BlackWolf systemd[1]: Started Accounts Service.


Njegov proces i dalje radi (sto i treba), ali systemd je svestan da je servis aktivan i zavrsio je sa podizanjem, ako neko ima Requires na ovaj servis bice pokrenut. Dakle, nekako postoji neka signalizacija, medjutim ja ne mogu da nadjem na netu nista o ovome.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
82.117.201.26



+1064 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 11:02 - pre 61 meseci
Nemoj da se brines, napises obican program pokrenes ga preko systemd-a i to je to. Mislim da je systemd asinhron pa neces blokirati ostale procese da se pokrenu. Cak ce ti i restartovati proces ako pukne.
Evo ti kratak tutorial:
https://medium.com/@benmorel/c...vice-with-systemd-611b5c8b91d6

Stvar je krajnje prosta, nema tu nikakve filozofije.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 11:21 - pre 61 meseci
Da, ali ako neko zavisi od mog servisa, kako systemd zna da sam ja spreman? Recimo moj chat server, hocu prvo da ucitam neku kofiguraciju, namestim nesto, ucitam nesto iz daleka, mozda treba 2, mozda 20 sekundi da ja pokrenem server. Kako systemd zna da sam spreman, tj active?

Ako neki unit ima required=helios-server kako zna da moze da ga pokrene?
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
82.117.201.26



+1064 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 11:30 - pre 61 meseci
Ne zna systemd da li si spreman ili ne. systemd je samo jedan od n init alternativnih procesa na Linux-u.To da li si spreman javi klijentu tvoje aplikacije ili jednostavno mozes da slusas tek onda kad si spreman.
Inace to da li si spreman mozes da izvedes jos i preko skripte koja ce izaci sa -1 0 i slicno, dok ces proces forkovati. Standardno na Unix-ima.
Osim toga systemd ima neki svoj api u koji uopste nisam zalazio posto nemam nameru da se vezujem za odredjeni init sistem ;)
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 11:30 - pre 61 meseci
Kako znaš da je na remote serveru pokrenut http demon.
Ne znaš, probaš, pa ako ne uspe probaš ponovo ili javiš grešku.

A systemd zna process id tvog servisa. I zna da li je živ ili nije.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 11:37 - pre 61 meseci
Kako onda radi Requires? Cemu sluzi uopste onda, onda komotno mozes asinhrono da pustis sve servise pa kom obojci kom opanci, nek oni sami paze dal je njihov dependency aktivan (jer ionako moraju)? Malo je to degute.


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
82.117.201.26



+1064 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 11:41 - pre 61 meseci
requires sluzi tome da neke procese ne startuje asinhrono. Kazem na Unix-u je standardno da imas skriptu koja javi 0 ili -1 prilikom izlaska i to je signal init daemon-u da li je nesto uspesno startovano ili ne.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 11:42 - pre 61 meseci
Kako upšte radi 1GB MS đubreta koje moraš da dovučeš na Linux da bi imao .Net core?
Po meni je neka vrsta travestije da pišeš C# koji treba da radi na Linuxu. Ljudi su odavno shvatili da ako je nešto teško da se napravi u C-u na Linuxu, urade to u Javi.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
82.117.201.26



+1064 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 11:45 - pre 61 meseci
Pa ima verovatno bruku koda uradjeno u C#. Posto sad ima native .NET na Linux-u, to je najjednostavnije resenje.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 11:45 - pre 61 meseci
Ok, ali sinhrono startovanje podrazumeva red, red podrazumeva pocetak i kraj svakog elementa. Ako systemd ne zna kad je kraj moje inicijalizacije kako moze da sinhrono pokrene sledeci u redu? Arbitrarni timeout?

Ja ako izadjem iz main threada sa greskom bilo kojom (0 ili -1) proces se gasi. Ako zapakujem moj izvrni fajl u (ba)sh onda systemd nema moj PID i ne zna dal sam uopste ziv.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
82.117.201.26



+1064 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 11:55 - pre 61 meseci
Na unix-u mozes znati sve child procese nekog procesa. Inace pogledaj systemd api specificno dbus sd-bus i slicno.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 12:01 - pre 61 meseci
Citat:
djoka_l:
Kako upšte radi 1GB MS đubreta koje moraš da dovučeš na Linux da bi imao .Net core?
Po meni je neka vrsta travestije da pišeš C# koji treba da radi na Linuxu. Ljudi su odavno shvatili da ako je nešto teško da se napravi u C-u na Linuxu, urade to u Javi.


.NET core zapravo radi savim lepo. Nisam jos radio benchmark ali mislim da su konacno batalili Mono JIT. Ako jesu, performanse su veoma blizu C++ koda.

Ceo SDK sa runtime-om je 270Mb, sam runtime je 70Mb za core plus jos 19Mb ako koristis asp.net. S tim sto ti ne treba, ako uradis full build prekopirace biblioteke u bin folder i distribuiras ih direktno, tako da je footprint minimalan.

Ovo je .NET core, ne .NET Framework, nema sistemskih dependencija i bloat-a.


Sve i da nemam bruku coda, C# mi je daleko bolje resenje od JVMa i Jave/Kotlina. To "ili je C ili Java" je stvar proslosti. .NET core je fully open source a C# je daleko superiorniji jezik od Jave, cak i od Kotlina, JITovan kod uvek radi na metalu. JetBrains cak ima i Linux alat (Rider) za .NET core preko kojeg sad radim. Davno je proslo vreme bloatovanog i sporog Monoa. Uskoroc ese pojaviti GUIx opcije za .net core i pocece sve vise da se javljaju aplikacije u njemu. Ja iskreno ne vidim nista losse u tome, ili gresim?



Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 12:54 - pre 61 meseci
Ok, fore radi napravio sam self-contained build:

Code:
mmix@BlackWolf:~/projects/Helios/HeliosServer/Helios.Server$ dotnet publish -c Release -r linux-x64 --self-contained true
Microsoft (R) Build Engine version 16.0.385-preview+g966cdf2ac6 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restoring packages for /home/mmix/projects/Helios/HeliosServer/Helios.Server/Helios.Server.csproj...
  Generating MSBuild file /home/mmix/projects/Helios/HeliosServer/Helios.Server/obj/Helios.Server.csproj.nuget.g.props.
  Restore completed in 144.25 ms for /home/mmix/projects/Helios/HeliosServer/Helios.Server/Helios.Server.csproj.
/opt/dotnet/sdk/3.0.100-preview-010184/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.RuntimeIdentifierInference.targets(151,5): message NETSDK1057: You are using a preview version of .NET Core. See: https://aka.ms/dotnet-core-preview [/home/mmix/projects/Helios/HeliosServer/Helios.Server/Helios.Server.csproj]
  Helios.Server -> /home/mmix/projects/Helios/HeliosServer/Helios.Server/bin/Release/netcoreapp3.0/linux-x64/Helios.Server.dll
  Helios.Server -> /home/mmix/projects/Helios/HeliosServer/Helios.Server/bin/Release/netcoreapp3.0/linux-x64/publish/

mmix@BlackWolf:~/projects/Helios/HeliosServer/Helios.Server$ cd bin/Release/netcoreapp3.0/linux-x64/publish/
mmix@BlackWolf:~/projects/Helios/HeliosServer/Helios.Server/bin/Release/netcoreapp3.0/linux-x64/publish$ du -BM
73M    .
mmix@BlackWolf:~/projects/Helios/HeliosServer/Helios.Server/bin/Release/netcoreapp3.0/linux-x64/publish$ ls Helios* -lah
-rwxrw-rw- 1 mmix mmix 117K Mar  6 13:25 Helios.Server
-rw-r--r-- 1 mmix mmix  27K Mar  6 13:25 Helios.Server.deps.json
-rw-rw-r-- 1 mmix mmix 6.5K Mar  6 13:25 Helios.Server.dll
-rw-rw-r-- 1 mmix mmix  840 Mar  6 13:25 Helios.Server.pdb
-rw-r--r-- 1 mmix mmix   26 Mar  6 13:25 Helios.Server.runtimeconfig.json

mmix@BlackWolf:~/projects/Helios/HeliosServer/Helios.Server/bin/Release/netcoreapp3.0/linux-x64/publish$ ./Helios.Server
Helios Server 0.1 Development (0), build 0.1.0.24156
Press <Enter> to exit... 


Code:
mmix@BlackWolf:~$ telnet localhost 1234
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Helios Server 0.1 Development (0), build 0.1.0.22299
Connection closed by foreign host.

mmix@BlackWolf:~$ ps -o rss,command 22586
  RSS COMMAND
27696 ./Helios.Server


Dakle, completan release a da klijent uopste ne mora da instalira bilo kakav runtime je 73Mb (sto ukljucuje i roslyn i JIT i core), od cega je aplikacija nekih 150K zajedno sa core launcehrom. Memory footprint pokrenute aplikacije je 26Mb, sto je nista i za losije masine danas.
Ali realno, bolje je imati runtime kao sto imas za Javu i onda deployment ima samo 150Kb (u ovom slucaju). 1GB? Ne vise, ni u kom slucaju.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 13:05 - pre 61 meseci
Ako ti pak smeta sto ima puno .dll fajlova iz samog core-a, mozes da warpujes u single executable gde si odbacuju neiskoriscene biblioteke. U ovom slucaju dobijes jedan izvrsni fajl od <30Mb:

mmix@BlackWolf:~/projects/Helios/HeliosServer/Helios.Server/bin/Release/netcoreapp3.0/linux-x64$ ./warp-packer --arch linux-x64 --exec Helios.Server --input_dir publish --output helios-complete
Compressing input directory "publish"...
Creating self-contained application binary "helios-complete"...
All done
mmix@BlackWolf:~/projects/Helios/HeliosServer/Helios.Server/bin/Release/netcoreapp3.0/linux-x64$ ls helios-complete -la
-rwxr-xr-x 1 mmix mmix 30195347 Mar 6 14:02 helios-complete
mmix@BlackWolf:~/projects/Helios/HeliosServer/Helios.Server/bin/Release/netcoreapp3.0/linux-x64$ ./helios-complete
Helios Server 0.1 Development (0), build 0.1.0.24156
Press <Enter> to exit...

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Srđan Pavlović
Specijalna Edukacija i Rehabilitacija MNRO
Vojvodina, Bačka Palanka

Član broj: 139340
Poruke: 5571
46.17.121.*

Sajt: www.oligofrenolog.com


+382 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 15:09 - pre 61 meseci
Kad napravis .deb paket javi da testiramo malo :D
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 17:00 - pre 61 meseci
Dogovoreno

Sad citam bas, nije bas tako jednostavno, mora da se forkuje sto je veoma Linux-stvar i nije cross-platform. Mislim da postoje platform specific verzije host managera (long story) koje sluze upravo tome. Probacu pa kad dobijem .deb javim

Inace, ima ta fora sa chainovanjem servisa, ali mora da ulkjucuje fork varijante, ili Type=fork ili Type=exec za [Service]. Nasao sam opis u systemd-service man-u
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
*.dyn.telefonica.de.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 17:40 - pre 61 meseci
Btw, aplikacija može da javi systemd-u da je spremna pomoću systemd_notify sistema.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 18:21 - pre 61 meseci
Btw, kad smo vec na temu sta moze u .NET core Gnome 3 GTK aplikacija u tri koraka.




Hehe, ulenji sam se na windozu vidim nesto nece da se ugasi proces, kad ono Gtk namerno fula Application.Run loop u prazno i kad nema nijedan prozor

Code (csharp):

myWin.Destroyed += (sender, eventArgs) => Application.Quit();
 



[Ovu poruku je menjao mmix dana 06.03.2019. u 20:09 GMT+1]
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
Prikačeni fajlovi
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
..ynamic.kabel-deutschland.de.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Pisanje systemd daemona :)06.03.2019. u 19:21 - pre 61 meseci
Odgovarao sam sa telefona, evo malo proširenog odgovora.

Citat:
U Windows svetu kad pravim servis ja sam obavezan da javim SCMu (Service Control Manager) koji me je i pozvao da je servis "ziv" i da potom uradim return i vratim thread SCMu. Ako to ne uradim (obe stvari), SCM ili prsne odmah ili timeout-uje start operaciju i ubije servisni proces pretpostavljajuci da je pokretanje servisa prslo.


Systemd način je da koristiš Type=notify i sd_notify() nakon što je Listen uspeo, što mi se čini kao ekvivalent ovome, s tim da ne moraš da vratiš thread systemd-u, već bi trebalo da uradiš join na listener thread - da održiš servis živim (ili da u glavnom thread-u uradiš Listen, ne treba ti zaseban, ako možeš da pozoveš sd_notify nakon listena).

Citat:
Ako zapakujem moj izvrni fajl u (ba)sh onda systemd nema moj PID i ne zna dal sam uopste ziv.


Ako ćeš ovako, ne zaboravi Type=forking, mada još od upstarta imam nekoliko negativnih iskustava sa istim, pa sam odustao od toga, nakon nekoliko istih. Jedan problem je što ne možeš da uviješ servis u bash skriptu, pa da initijalizuješ aplikaciju (npr. da pročitaš ogromne fajlove sa diska), pa da forkuješ, jer tu imaš dva forka - osim ako ne izbegneš fork u skripti exec-om. Dalje, problem je ako inicijalizacija programa već diže nekoliko threadova, jer će fork nakon inicijalizacije da klonira samo jedan thread (koji poziva fork).

Lep pregled šta "new style daemon" treba da uradi se može naći https://www.freedesktop.org/software/systemd/man/daemon.html
 
Odgovor na temu

Srđan Pavlović
Specijalna Edukacija i Rehabilitacija MNRO
Vojvodina, Bačka Palanka

Član broj: 139340
Poruke: 5571
46.17.121.*

Sajt: www.oligofrenolog.com


+382 Profil

icon Re: Pisanje systemd daemona :)07.03.2019. u 00:00 - pre 61 meseci
Informativno za temu :)




 
Odgovor na temu

[es] :: Linux :: Pisanje systemd daemona :)

Strane: 1 2

[ Pregleda: 4040 | Odgovora: 30 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.