Czasem potrzebujemy ustawić by jakieś operacje (np. uruchomienie programu/usługi) były wykonywane razem ze startem systemu. Dziś przedstawię 2-3 takie metody. Standardowo będę bazował na systemie Debian – powinno dziać we wszystkich dystrybucjach, w tym Raspbian (Raspberry Pi) czy Ubuntu. W pozostałych dystrybucjach może być wymagana mała korekta, choć niekoniecznie…

Skrypt w init.d

Skrypt startowy w ramach init.d sprawdzi się zwłaszcza przy bardziej skomplikowanych usługach/projektach – dostajemy do ręki spore możliwości, w tym opcje związane z zarządzaniem stanem (start, stop, restart…).

Samo przygotowanie skryptu (czy przerobienie/dostosowanie „zwykłego skryptu” który już mamy) nie jest specjalnie skomplikowane, choć oczywiście trzeba zachować pewien „szkielet” pliku, w czym pomoże Wam przykładowy/wzorcowy plik:

/etc/init.d/skeleton

Przykładowe skrypty możecie również znaleźć na naszej stronie:

Chyba najprostszy, przykładowy skrypt:


#!/bin/sh
### BEGIN INIT INFO
# Provides: nazwa_usługi
# Required-Start: $remote_fs $syslog $all
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Krótki opis działania
# Description: Dłuższy opis działania
### END INIT INFO

### START config here:
ZMIENNA="nazwa_usługi"
### END config here.

start() {
	echo "Start $ZMIENNA"
	# Jakiś kod
}
stop() {
 	echo "Stop $ZMIENNA"
	# Jakiś kod
}

case "$1" in
   start)
       start
       ;;
   stop)
       stop
       ;;
   restart)
       stop
       start
       ;;
   *)
       echo "Usage: /etc/init.d/nazwa_usługi {start|stop|restart}"
       exit 1
esac

exit 0

Tak przygotowany skrypt należy zapisać w katalogu /etc/init.d:

/etc/init.d/nazwa_usługi

Następnie ustawiamy typ pliku na wykonywalny

sudo chmod +x /etc/init.d/nazwa_usługi

Na koniec aktywacja:

update-rc.d nazwa_usługi defaults
W Debian 8 Jessie, zamiast powyższego polecenia można użyć:

sudo insserv nazwa_usługi

A czasem – przy niektórych zależnościach start/stop – jest to wręcz wymagane (a przynajmniej mocno zalecane).

Skryptem można też sterować ręcznie, za pomocą komend:

sudo service nazwa_usługi start
sudo service nazwa_usługi stop
sudo service nazwa_usługi restart

A jak byście chcieli wyłączyć skrypt, to wystarczy skorzystać z polecenia:

sudo update-rc.d nazwa_usługi remove

/etc/rc.local

Jest to plik przetwarzany przy każdym starcie systemu – możemy tu dodać polecenie lub ścieżkę do skryptu, który ma się wykonać podczas startu systemu.

Zasada jest banalna – po prostu przed linijką „exit 0” dodajemy np.:

echo "System został uruchomiony"

Lub:

/ścieżka/do/skryptu

CRON

Czasem niektórzy zapominają, że również CRONa można wykorzystać do tego, by uruchomić komendę lub skrypt przy każdym uruchomieniu systemu.

W tym celu zamiast deklarowania, kiedy ma zostać uruchomione polecenie lub skrypt korzystamy z „@reboot”, np.:

@reboot echo "System uruchomiony"
@reboot /ścieżka/do/skryptu

Można też wykonanie zadania opóźnić, np. o 20 sekund:

@reboot sleep 20 && /ścieżka/do/skryptu

Gdyby takie zadania się nie wykonywały, to warto sprawdzić, czy CRON startuje przy starcie systemu:

sudo systemctl status cron.service

I ew. aktywować:

sudo systemctl enable cron.service

Więcej o CRONie przeczytacie w naszym wcześniejszym wpisie, który został w całości poświęcony temu zagadnieniu…

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk