it:server:automaticke-spousteni-skriptu-po-startu-systemu

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.

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

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.

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é.

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.

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.

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

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

  • it/server/automaticke-spousteni-skriptu-po-startu-systemu.txt
  • Poslední úprava: 2025/02/15 09:14
  • autor: Petr Nosek