[Megoldva] Systemd service indítása init script lefutása után

Fórumok

Sziasztok!

Van egy rendszerem, amit a kernel paraméterek között init=/usr/sbin/script jelleggel indítok.
Ez a script végez némi előkészítést és innentől válik "írhatóvá" a fájlrendszer (Debian), majd indul a normál init process.

A systemd viszont indítgatja a szolgáltatásokat, és néhány service csak olvasható fájlrendszerre panaszkodva nem indul el emiatt.
...persze a fenti script lefutása után már indulnának ezek is...

Úgy tűnik, ha létrehozok a /etc/systemd/system alá egy-egy fájlt a [Unit] rész alá írt "After=rc-local.service" paraméterrel, akkor a legtöbb, pl. az ntp szerviz már elindul.
Ez így helyes? Mármint az, hogy feltételezem, a konfig többi részét a /lib/systemd/system alól veszi...

Úgy tűnik, ilyen hibrid megoldás nem tetszik neki, de az sem, ha szimplán beteszem a /etc alá úgy, hogy a /lib alatt még létezik.

Ugyanakkor a hostnamed szerviz továbbra sem fut le, de, ha a /lib/systemd/system könyvtár alatt módosítom a systemd-hostnamed.service fájlban ugyanezt, akkor hiba nélkül lefut.

Kérdésem, hogy miként tudnám megmondani a systemd számára, hogy a fenti init script után indítsa el ezeket a szolgáltatásokat (tehát nem rc.local után), esetleg azt, hogy lehetőleg semmit ne indítson addig, amíg a fenti init script nem fut le? ...

A másik dolog, ami kevésbé tetszik, hogy a /lib/systemd/system könyvtár alatti fájlt módosítsam, mert tartok tőle, hogy a rendszer egy későbbi frissítés során önkényesen módosítani fogja vagy hibára fut.
Hogyan kezeli ezeket a fájlokat frissítés során? Értelmezi és megtartja a módosításokat, vagy nem kezel ilyesmit?

Mi lenne a helyes megoldás ezeknek a szolgáltatásoknak a késleltetett indítására, egyáltalán miért futtat bármit is a kernel paraméterként megadott init lefutása előtt?

Javaslataitokat előre is köszönöm.

Megoldva - figyelmetlen voltam...

Hozzászólások

Szerkesztve: 2020. 03. 27., p - 06:30

A systemctl edit alparancsa egy override file-t fog létrehozni egy, a service-hez automatikusan include-olt alkönyvtárral együtt, aminek a tartalma inkrementális a unitban foglaltakhoz és a csomagkezelő lógva is hagyja a továbbiakban - pontosan erre való.

Köszi. Létrehozott a /etc/systemd/system alá egy service-szel azonos nevű könyvtárat, benne egy override.conf fájllal és ebbe írta bele a tartalmat.

Nem tudod véletlenül, hogy lehetne generálisan rávenni a systemd-t, hogy várja meg az init program lefutását és ne indítgasson addig nekem szolgáltatásokat?
Szerintem van némi versenyhelyzet még és időnként nem éled fel az eszközön a hálózat...

Mit csinál az eredetileg indított scripted? És hogy indul el a systemd, ha a saját scripted fut helyette?
Attól függően érdemes megfelelő unittal lecserélni, és igazából hagyni, hogy a systemd végezze a dolgát.

BlackY

"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Én nem megerőszakolnám a systemd-t, hanem inkább vele oldanám ezt meg. Van mindenféle systemd-mount, meg unit file-ok, azok függőségei, amivel be lehet avatkozni. Konkrétumot nem mondok, nézd meg a doksit, de jól van kitalálva. Egyrészt le lehet cserélni úgy is unit file-t, hogy az „kitakarja” a disztribúció által szállítottat, így a frissítés nem fog gondot okozni, másfelől azt is tudja a systemd, hogy a már meglévő unitfile-t egészíti ki az általad megadott paraméterekkel, vagy ír felül bizonyos, eredetileg másként megadott paramétert. Ekkor a frissítés módosítani tudja a téged nem érintő paramétereket, míg a számodra érdekesek mégsem módosulnak majd. Van egy rakás doksi, pl.:

https://www.freedesktop.org/software/systemd/man/daemon.html

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Köszönöm a segítségeket.

Úgy néz ki, sikerült megoldani.

Valószínűleg az init valóban azt csinálja, amit várnánk tőle és még a systemd előtt lefut (elvileg ez kellene legyen az első), csak félrevezettem magam...

Az fstab automatikus szerkesztésébe becsúszott egy hiba, ezért nem találta meg az eredeti root bejegyzést (ezt kellett volna eltávolítania), ill. kimaradt belőle az overlay bejegyzés...
A felcsatolást megcsinálta, de ekkor még read-only lett ez is.

Helyes fstab mellett viszont az előkészítés lefutása után indítja a rendes init-et és a rendszer megcsinálja az rw csatolást is rendesen.
A /etc alól kivettem az override-okat is, most lefut minden hiba nélkül akkor is, ha engedélyezem az overlay működést és akkor is, ha tiltom.

Ha a te scripted az init (PID=1), akkor ki/mi indítja el a systemd-t? A saját scripted végén legyen egy ilyen:

<code>
exec /tron/MasterControlProgram
exec systemd
</code>