====== 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í.