Tři způsoby, jak automaticky spouštět programy na Raspberry Pi

22.06.2023 Raspberry Pi #crontab #raspberrypi

Zdánlivě snadné, ale bohužel ne vždy jednoznačné řešení pomocí příkazu CRONTAB. Při rebootu systému CRONTAB funguje, ale čistém spuštění se to ne vždy povede.


V předchozím článku jsou uvedeny příklady automatického spouštění programů s využitím příkazu CRONTAB. Tímto příkazem dobře funguje pravidelné spouštění konkrétního programu nebo skriptu. Bohužel pokud chceme spustit program spustit například po startu systému, tak bohužel příkaz @reboot nefunguje. Záměrně je uvedeno START systému. Protože při restartu systému se program spustí, ale pokud dojde například k vypnutí Raspberry Pi vlivem výpadku proudu a následně k zapnutí, tak se program nespustí.

1. Vložení skriptu do /etc/init.d

Prvním řešením, které můžeme použít, je vytvořit skript v /etc/init.d.
Obecně se dává přednost této metodě pro něco jako je služba, například pro skript brány firewall.
Není to nejlepší způsob, ale funguje to :).

Stále však existuje minimální forma, kterou je třeba respektovat pro spuštění skriptu při bootování.
Zde, jak to udělat:

Vytvořte nový soubor v /etc/init.d:

sudo nano /etc/init.d/myservice

Změňte název souboru, aby byl explicitní.

Vložte následující řádky (například):

#!/bin/bash
### BEGIN INIT INFO
# Provides: MyService
# Required-Start:    $all
# Required-Stop: 
# Default-Start:     5 
# Default-Stop:      6 
# Short-Description: Your service description
### END INIT INFO

touch /home/pi/myservice_test

Komentáře na začátku jsou povinné, aby se skript spustil při bootování (úroveň běhu 5).
Změňte název a popis služby, abyste vysvětlili, co váš skript dělá.

Uložte soubor a ukončete (CTRL+X).

Přidejte do skriptu oprávnění ke spuštění:

sudo chmod +x /etc/init.d/myservice

Nakonec musíme systému říci, aby jej spustil při spuštění pomocí tohoto příkazu:

sudo update-rc.d myservice defaults

To je opravdu minimum, aby to fungovalo. Cílem je zde pouze spustit skript při bootování. Pokud to chcete udělat správně, musíte do své služby přidat alespoň možnost spuštění, zastavení a restartování. Pokud to chcete udělat, můžete zde najít podrobnou dokumentaci.

Zkuste restartovat, pokud je vše v pořádku, váš skript by se měl spustit jednou při každém spuštění Raspberry Pi.

2. Vytvoření tzv. upstart úlohy

Druhou možností je vytvoření tzv. upstart úlohy. V předchozí verzi OS Raspberry Pi to bylo možné nastavit v grafickém režimu, ale na nových verzích OS Raspberry Pi to vypadá, že je nedostupné.

Zde je postup, jak to provést s konfiguračním souborem:

Vytvořte soubor v /etc/init (nikoli init.d!)

sudo nano /etc/init/myjob.conf

Vložte následující obsah:

description "my job"
start on startup
task
exec /home/pi/Desktop/test.sh

Nezapomeňte upravit název souboru a popis, abyste si zapamatovali, co to je :).

To je vše!
Pouhé vytvoření tohoto souboru stačí k tomu, aby fungoval při každém spuštění.

3. Přidání řádku do /etc/rc.local

Nakonec metoda rc.local je pravděpodobně nejjednodušší, protože si stačí zapamatovat název souboru, abyste věděli, co dělat :).

Soubor rc.local je skript určený pro správce systému.
Při spouštění je to jedna z posledních věcí, které se provádějí (na konci úrovně běhu pro více uživatelů).
Takže je to přesně to, co potřebujete ke spuštění vlastní služby.

Zde je návod, jak jej používat:

Otevřete soubor rc.local:

sudo nano /etc/rc.local

Vložte svůj skript nebo službu těsně před řádek „exit 0“
Něco takového:

Uložte a ukončete (CTRL+X).

Pokud chcete, můžete nyní restartovat a vyzkoušet to.