Štart vlastného skriptu v systemd

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.

Leave a Reply

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *