====== Automatické spouštění skriptů po startu systému ======
V minulosti bylo běžné nastavovat akce po spuštění systému pomocí souboru ''/etc/rc.local''. Pokud však používáte moderní distribuci Linuxu, jako je Xubuntu nebo Raspberry Pi OS (Debian-based distribuce), pravděpodobně jste zjistili, že tento soubor již neexistuje nebo není funkční.
Důvodem je přechod na nový inicializační systém **systemd**, který nabízí robustnější a flexibilnější způsob správy služeb. Pokud potřebujete nastavit automatické spouštění vlastních skriptů po startu systému, zde jsou dvě doporučené metody.
===== 1. Použití systemd service =====
Systemd umožňuje vytvoření vlastní služby, která se spustí při startu systému.
**Postup vytvoření služby:**
Otevřete terminál a vytvořte nový soubor služby:
sudo nano /etc/systemd/system/moje_sluzba.service
Do souboru vložte následující konfiguraci:
[Unit]
Description=Můj startovací skript
After=network.target
[Service]
ExecStart=/cesta/k/mojemu_skriptu.sh
Restart=always
User=root
[Install]
WantedBy=multi-user.target
* Nahraďte ''/cesta/k/mojemu_skriptu.sh'' cestou ke svému skriptu.
* ''User=root'' zajistí, že se skript spustí pod rootem (můžete změnit na jiného uživatele).
* ''Restart=always'' znamená, že služba bude automaticky restartována v případě pádu.
Ujistěte se, že je skript spustitelný:
sudo chmod +x /cesta/k/mojemu_skriptu.sh
Načtěte novou službu:
sudo systemctl daemon-reload
Povolte službu, aby se spouštěla při každém startu systému:
sudo systemctl enable moje_sluzba.service
Spusťte ji hned pro otestování:
sudo systemctl start moje_sluzba.service
Ověřte její stav:
sudo systemctl status moje_sluzba.service
===== 2. Alternativní metoda: Použití crontab =====
Pokud chcete jen jednoduše spustit skript po startu systému bez vytváření služby, můžete použít **cron**.
Otevřete crontab pro uživatele root:
sudo crontab -e
Přidejte na konec souboru tento řádek:
@reboot /cesta/k/mojemu_skriptu.sh
Tím zajistíte, že se skript spustí při každém startu systému.
===== Shrnutí =====
^ Metoda ^ Výhody ^ Nevýhody ^
| **systemd service** | Doporučený způsob, robustní správa, automatické restartování, kontrola stavu | Vyžaduje vytvoření služby |
| **crontab @reboot** | Jednoduché a rychlé | Žádná správa služeb, horší debugování |
Doporučujeme **systemd**, protože je spolehlivější a lépe integrovaný do moderních distribucí Linuxu. Pokud však hledáte jednoduché řešení, ''crontab @reboot'' může být dostatečné.
===== Použití /etc/rc.local v systemd =====
V systému se stále můžeme spoléhat na **/etc/rc.local** pro spouštění vlastních skriptů při startu. **systemd** kontroluje existenci tohoto souboru a pokud existuje, automaticky ho zařadí do spouštěných služeb pomocí **systemd-rc-local-generator**.
==== Jak ověřit dostupnost systemd-rc-local-generator ====
**systemd-rc-local-generator** je součástí systemd a vytváří službu `rc-local.service`, která umožňuje spouštění `/etc/rc.local`. Ne všechny distribuce jej však mají povolený.
Zkontrolujte jeho přítomnost v systému pomocí:
systemd-analyze dump | grep systemd-rc-local-generator
nebo:
ls -l /usr/lib/systemd/system-generators/systemd-rc-local-generator
(Podle distribuce může být umístěn i v `/lib/systemd/system-generators/`.)
Pokud existuje, znamená to, že je součástí systemd a můžeme ho využít.
==== Aktivace /etc/rc.local v systemd ====
1. Ujistěte se, že soubor existuje a je spustitelný:
sudo touch /etc/rc.local
sudo chmod +x /etc/rc.local
2. Přidejte do něj požadované příkazy, například:
sudo nano /etc/rc.local
A vložte:
#!/bin/bash
echo "Spuštěno při bootu" > /tmp/test.log
exit 0
Uložte soubor a zavřete editor.
3. Ověřte stav služby:
systemctl status rc-local
Pokud není aktivní, povolte ji:
sudo systemctl enable rc-local
A spusťte ji ručně:
sudo systemctl start rc-local
==== Co dělat, pokud systemd-rc-local-generator chybí? ====
Pokud v systému **systemd-rc-local-generator** není k dispozici, může být zakázán při kompilaci systemd v dané distribuci. V takovém případě je možné vytvořit vlastní unit soubor pro `/etc/rc.local`:
1. Vytvořte nový unit soubor:
sudo nano /etc/systemd/system/rc-local.service
2. Vložte následující obsah:
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
[Install]
WantedBy=multi-user.target
3. Aktivujte službu:
sudo systemctl enable rc-local
sudo systemctl start rc-local
Tímto způsobem lze dosáhnout stejné funkcionality i v případě, že systemd-rc-local-generator chybí.