Systemd je démon pre správu systému navrhnutý exkluzívne pre linux a jeho API. Dalo by sa povedať, že systemd je nástupca démona init. Ale až tak celkom pravda to nie je, pretože niektoré distribúcie linuxu, stále neprešli na systemd, ale používajú init.d.
V distribúciach linuxu, ktoré používali init sa jednoducho do /etc/rc.local
vložil na koniec súboru riadok, ktorý smeroval na spustiteľný skript. Tak bolo zabezpečené, že po štarte systému sa spustili všetky skripty, ktorých cesty boli uložené v /etc/rc.local
. V distribúciach, ktoré používajú systemd to už takto nefunguje. Ak máme vlastný skript, ktorý chceme spustiť pri štarte systému musíme postupovať inak. popíšem to na konkrétnom skripte.
V linuxovom kontajnery LXC beži Debian Stretch, ktorý používa systemd. Na tomto kontajnery mám spustený syslog server, ktorý pomocou SNMP preberá log z mikrotiku a údaje zapisuje do mySQL databázy. Dáta z mikrotiku sa ukladajú do klasických súborov, ale keď ich chcem poslať do DB, musím spustiť skript, ktorý to spraví. Nechcem tu nikomu zamotávať hlavu o aký skript sa jedna a rovno prejdem na to ako vytvoriť ďalší skript, ktorý zabezpečí aby sa ten prvý pri štarte systému spustil
Skript, ktorý chcem spustiť je umiestnený v /temp/mysql-2-syslog.sh
. Najprv zabezpečíme aby bol skript spustiteľný
chmod +x /temp/mysql-2-syslog.sh
Teraz vytvoríme nový skript na tomto mieste s koncovkou service
nano /etc/systemd/system/mysql-2-syslog.service
Do skriptu vložíme následující kod
[Unit]
Description=popis_skriptu.
[Service]
Type=simple
ExecStart=/temp/mysql-2-syslog.sh
[Install]
WantedBy=multi-user.target
Tento skript spravíme spustiteľným
chmod 644 /etc/systemd/system/mysql-2-syslog.service
Teraz môžeme tento skript spúšťať, zastavovať a preverovať či je spustený, následujícími príkazmi.
systemctl start mysql-2-syslog
systemctl stop mysql-2-syslog
systemctl status mysql-2-syslog
Ak skript beží, tak posledný príkaz by mal zobraziť na štandardný výstup
● mysql-2-syslog.service - popis_skriptu.
Loaded: loaded (/etc/systemd/system/mysql-2-syslog.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2019-09-23 09:58:22 CEST; 6min ago
Main PID: 558 (mysql-2-syslog.)
Tasks: 2 (limit: 4915)
CGroup: /system.slice/mysql-2-syslog.service
├─558 /bin/bash /temp/mysql-2-syslog.sh
└─567 /bin/bash /temp/mysql-2-syslog.sh
sep 23 09:58:22 syslog systemd[1]: Started popis_skriptu..
Dôležitý je riadok 3, ktorý hovorí, že skript beží, kedy bol spustený a ako dlho už beží. Keď sme preverili, že všetko funguje, môžeme vytvoriť symlink a povoliť skript
systemctl enable mysql-2-syslog
Teraz sa skript bude automaticky spúšťať hneď po štarte systému.