Portál AbcLinuxu, 6. května 2025 07:35

Dotaz: Pořadí spouštění služeb při startu Debianu

5.11.2018 12:50 Pomlázka
Pořadí spouštění služeb při startu Debianu
Přečteno: 665×
Odpovědět | Admin
Ahoj, mám Debian 9 se systemd a chtěl bych se zeptat, jak zpřeházet pořadí spouštěných služeb při startu systému. Stačí v runlevelu 2 změnit jen pořadové číslo nebo se to dělá nějak jinak? Jde mi o to, že třeba se mi nespustí Samba, protože nemá při svém startu ještě k dispozici LDAP. Po najetí systému jí bez problému zapnu ručně. Takových služeb tu mám víc. Díky.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (Filip Jirsák)
5.11.2018 13:05 SpaceExplo | skóre: 15
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na runlevel v systemd uplne zapomen. Jede se na targety (kuprikladu multi-user.target) - vice treba zde https://www.systutorials.com/239880/change-systemd-boot-target-linux/

Systemd startuje sluzby paralelne podle "stromu zavislosti", ktery si vytvori pri "systemctl daemon-reload"

Takze to co potrebujes je nastavit tem sluzbam zavislost na LDAP s tim, ze maji startovat az po ni. K tomu si budes muset zjistit jak presne se ktera sluzba v systemd jmenuje a nasledne jim pridat "lokalni" konfiguraci do /etc/systemd/system/[service-name].service.d/ adresare, kterej si vytvoris. (je to vhodnejsi, nez primo editovat .service soubor te sluzby, kvuli upgradum)

Obecne budes resit "After" definici v [Unit] sekci, zde podrobne info: https://www.freedesktop.org/software/systemd/man/systemd.unit.html#

Nejlepe najit si par prikladu na netu, ale treba tohle je moje reseni jak nastartovat sluzbu az po DB:
[root@XXXXXX ~]# cat /etc/systemd/system/JMENO.service.d/start-after-mariadb.conf
[Unit]
After=mariadb.service


A samozrejme, po zmenach nezapomenout pustit systemctl daemon-reload
5.11.2018 13:14 Pomlázka
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Tak to je mazec. Díky za nakopnutí, jdu se v tom pohrabat:)
5.11.2018 13:38 SpaceExplo | skóre: 15
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Za malo, dej vedet jak jsi dopadnul :-)

Jinak, systemd je dobre si nejak osvojit, protoze uz je vlastne vsude a hooodne veci dela jinak.
5.11.2018 13:43 Pomlázka
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Nějak se nezadařilo. Někde mám asi botu:
● smbd.service - Samba SMB Daemon
   Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/smbd.service.d
           └─start-after-slapd.conf
   Active: failed (Result: exit-code) since Mon 2018-11-05 13:36:16 CET; 1min 54s ago
     Docs: man:smbd(8)
           man:samba(7)
           man:smb.conf(5)
  Process: 1311 ExecStart=/usr/sbin/smbd $SMBDOPTIONS (code=exited, status=1/FAILURE)
 Main PID: 1311 (code=exited, status=1/FAILURE)
   Status: "Starting process..."

lis 05 13:35:47 server systemd[1]: Starting Samba SMB Daemon...
lis 05 13:36:00 server systemd[1]: smbd.service: Supervising process 1311 which is not our child. We'll most likely not notice when it exits.
lis 05 13:36:16 server systemd[1]: smbd.service: Main process exited, code=exited, status=1/FAILURE
lis 05 13:36:16 server systemd[1]: Failed to start Samba SMB Daemon.
lis 05 13:36:16 server systemd[1]: smbd.service: Unit entered failed state.
lis 05 13:36:16 server systemd[1]: smbd.service: Failed with result 'exit-code'.
# cat /etc/systemd/system/smbd.service.d/start-after-slapd.conf
[Unit]
After=slapd.service
[2018/11/05 13:28:17.684356,  0] ../source3/passdb/pdb_interface.c:180(make_pdb_method_name)
  pdb backend ldapsam:ldap://localhost did not correctly init (error was NT_STATUS_CANT_ACCESS_DOMAIN_INFO)
[2018/11/05 13:36:00.416891,  0] ../source3/lib/smbldap.c:998(smbldap_connect_system)
  failed to bind to server ldap://localhost with dn="cn=admin,dc=local,dc=loc" Error: Can't contact LDAP server
        (unknown)
Ručně je to pak OK:
● smbd.service - Samba SMB Daemon
   Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/smbd.service.d
           └─start-after-slapd.conf
   Active: active (running) since Mon 2018-11-05 13:41:30 CET; 36s ago
     Docs: man:smbd(8)
           man:samba(7)
           man:smb.conf(5)
 Main PID: 4233 (smbd)
   Status: "smbd: ready to serve connections..."
    Tasks: 4 (limit: 4915)
   CGroup: /system.slice/smbd.service
           ├─4233 /usr/sbin/smbd
           ├─4236 /usr/sbin/smbd
           ├─4237 /usr/sbin/smbd
           └─4247 /usr/sbin/smbd

lis 05 13:41:14 server systemd[1]: Starting Samba SMB Daemon...
Napadá vás něco?

5.11.2018 14:21 SpaceExplo | skóre: 15
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Jsi si jistej, ze ta sluzba se jmenuje "slapd"?

Vypise ti systemctl status slapd smyslupnej vystup?

Zkus jeste systemctl list-unit-files | grep -i ldap
5.11.2018 14:30 Pomlázka
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
jj, je to slapd
● slapd.service - LSB: OpenLDAP standalone server (Lightweight Directory Access Protocol)
   Loaded: loaded (/etc/init.d/slapd; generated; vendor preset: enabled)
   Active: active (running) since Mon 2018-11-05 13:36:49 CET; 51min ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 10 (limit: 4915)
   CGroup: /system.slice/slapd.service
           └─1967 /usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -f /etc/ldap/slapd.conf
# systemctl list-unit-files | grep -i ldap
#
# systemctl list-unit-files | grep -i slapd
slapd.service                          generated
napadá mě, jestli nemá Debian zase nějakou specialitku v konfigu..
5.11.2018 15:30 SpaceExplo | skóre: 15
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Zkus jeste do toho config souboru prihodit "Requires", asi takhle:
# cat /etc/systemd/system/smbd.service.d/start-after-slapd.conf
[Unit]
After=slapd.service
Requires=slapd.service
5.11.2018 16:49 Pomlázka
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Tak ani to nepomohlo:( Ale třeba moje domněnka, že smdb nenastartuje kvůli, v té době nedostupnému, ldapu je blbost. Podle logu jsem to tak ale vydedukoval...
Josef Kufner avatar 5.11.2018 16:54 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Napřed si ověř, že tu konfiguraci máš správně a načítá se:
systemctl show smbd.service
systemctl list-dependencies smbd.service
Hello world ! Segmentation fault (core dumped)
5.11.2018 17:20 SpaceExplo | skóre: 15
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Myslim si, ze jsi to vydedukoval dobre :-(

Zkusil jsem si nainstalovat slapd na jednu VM a zda se, ze slapd nema nativni systemd .service soubor pro start, ale startuje pomoci "jakesi kompatibility" systemd se starsimi startup skripty. A az ted jsem si toho vsiml ve tvym vypisu:
● slapd.service - LSB: OpenLDAP standalone server (Lightweight Directory Access Protocol) 
Loaded: loaded (/etc/init.d/slapd; generated; vendor preset: enabled)
a
# systemctl list-unit-files | grep -i slapd
slapd.service                          generated
A ja si myslim, ze tohle je ten problem :-(
Dokud nebude mit slapd v Debian 9 nativni systemd soubor pro start, tak ta zavislost asi(?) fungovat nebude :-(

Jediny postup, ktery me ted napada je "nesystemovy" - tedy takovy, ktery by sice fungoval, ale s nejvetsi pravdepodobnosti by byl narusen pri upgradu slapd. Obecne bych to popsal asi takto:
- presunout /etc/init.d/slapd jinam (aby nenarusoval systemd)
- vytvorit vlastni slapd.service soubor a dat ho do /etc/systemd/system/
- a pak ladit a ladit a hledat moznosti, jak po startu slapd mit jistotu, ze uz bezi a uz muze/bude odpovidat na dotazy (protoze uspesny start demona muze byt nasledovan jeho inicializaci a to muze trvat)
5.11.2018 17:50 Pomlázka
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Hmm. Když to tak vidím, tak by bylo asi spíš lepší posunout smbd.service nějak dál v pořadí bez ohledu na to, jestli ldap běží nebo ne. To by mělo jít, nebo ne?
Josef Kufner avatar 5.11.2018 18:28 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
slapd nemusíš nijak upravovat, stačí u smbd nastavit, že závisí na slapd. Viz výše.
Hello world ! Segmentation fault (core dumped)
5.11.2018 20:38 Pomlázka
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
To ale nefunguje, viz výše.
Josef Kufner avatar 5.11.2018 21:08 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Pak je ještě možné, že slapd chvíli trvá vyrobit/otevřít poslouchací socket a systemd si myslí, že už služba běží. Tento problém elegantně řeší socket activation, ale musí to umět ten démon (slapd), neboť namísto přímého otevření socketu ten socket otevře systemd dlouho před startem služeb a služba ho dostane po dbus. Klienti se pak připojují na nachystaný socket (takže to neselže) a zaseknou se do doby, než služba nastartuje a vyzvedne příchozí spojen.

Můžeš zkusit připsat sleep 5 do spouštění dané služby, která slapd používá, aby chvíli počkala. Nebo, pokud selže okamžitě, nastavit opětovné pokusy o spuštění po selhání (RestartOn a RestartSec).
Hello world ! Segmentation fault (core dumped)
5.11.2018 23:37 SpaceExplo | skóre: 15
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Myslenka s restart se mi libi, ty volby by se daly pridat do toho konfiguraku smbd.service.d/start-after-slapd.conf

Ovsem pozor - systemd v poslednich verzi trochu zmenilo nazvoslovi tech "Restart*" polozek a presunovalo je mezi kategoriema [Unit] a [Service].
Debian 9.5 ma verzi 232 a nejlepsi je hledat info v man strankach na masine:
# man systemd-unit
# man systemd-service
V tech man strankach pak hledat "Restart" a "Limit" a navede to k temto polozkam:
StartLimitIntervalSec=, StartLimitBurst=, Restart= a RestartSec=
6.11.2018 10:46 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Dokud nebude mit slapd v Debian 9 nativni systemd soubor pro start, tak ta zavislost asi(?) fungovat nebude :-(
Závislost samozřejmě fungovat bude. Problém je v tom, že pokud je jednotka jenom nějaký wrapper kolem bůhvíjakých skriptů, nemá systemd jak zjistit, že služba nastartovala a dokáže poskytovat služby. Nejspíš bude službu považovat za nastartovanou v okamžiku, kdy skončí nějaký startovací skript, protože dál už vidět nemůže.

Pokud slapd startuje tak, že začne naslouchat na příslušném portu, odforkuje se a pak se startovací proces ukončí, pomohlo by vytvořit si vlastní jednotku, která bude spouštět přímo slapd a bude typu forking. Systemd pak podle ukončení spouštěcího procesu pozná, že slapd nastartoval, a začne spouštět závislé služby.
k3dAR avatar 6.11.2018 18:49 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
ze by ;-)
porad nemam telo, ale uz mam hlavu... nobody
k3dAR avatar 5.11.2018 23:47 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Pořadí spouštění služeb při startu Debianu
Odpovědět | | Sbalit | Link | Blokovat | Admin
mozna se inspiruj u Arch, kterej si systemd slapd.service pridava pro balicek:-)
porad nemam telo, ale uz mam hlavu... nobody

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.