Krátký návod pro vytvoření jednorázové služby, která může sloužit jako mnohem lepší náhrada starého rc.local. A také si ukážeme, jak volat služby v kontejneru nspawn přímo z hostitele.
Service
Do souboru /etc/systemd/system/sluzba.service dáme následující obsah (zde je příklad, který používám pro zálohování databáze PostgreSQL):
[Unit]
Description=PostgreSQL backup
[Service]
Type=oneshot
ExecStart=/usr/bin/bash /root/bin/backup.sh
Kde:
- Description: popis služby
- Type: oneshot pro jednorázové služby
- ExecStart: program, který se spustí
Vhodné jsou i další volby, například User a Group, aby služba běžela s minimálními právy, ideálně pro každou činnost vytvoříme dalšího uživatele, klidně bez hesla a bez možnosti přihlášení (adduser --system).
Službu spustíme:
systemctl daemon-reloadsystemctl start sluzba.service
Timer
Pokud máme napsanou a otestovanou službu, můžeme si jednoduše nastavit její pravidelné spouštění a nahradit tím zastaralý cron.
Vytvoříme soubor .timer stejného jména jako má služba a nastavíme:
[Unit]
Description=Backup system every day
[Timer]
OnCalendar=daily
AccuracySec=1h
Persistent=true
[Install]
WantedBy=timers.target
Je třeba jen nastavit WantedBy=timers.target a samozřejmě čas spouštění u kterého můžeme nastavit i přesnost, což umožní systemd naplánovat běh služeb v závislosti na jejich počtu, závislostech a s dalším nastavením i s ohledem na volné prostředky.
Spouštění z hostitele
Služby v nspawn kontejneru lze ovládat i z hostitele systémovým příkazem systemctl -M pg start backup.service, kde -M je parametr udávající název kontejneru. Takto je tedy možné ovládat služby, které běží k kontejnerech přímo z jednoho stroje.