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 stroni:

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 &

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
Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!

Spodobał Ci się artykuł? Zapisz się do naszego Newslettera - ZERO SPAMu, same konkrety, oraz dostęp do dodatkowych materiałów przeznaczonych dla subskrybentów!

Na podany adres e-mail otrzymasz od nas wiadomość e-mail, w której znajdziesz link do potwierdzenia subskrypcji naszego Newslettera. Dzięki temu mamy pewność, że nikt nie dodał Twojego adresu przez przypadek. Jeśli wiadomość nie przyjdzie w ciągu najbliższej godziny (zazwyczaj jest to maksymalnie kilka minut) sprawdź folder SPAM.

Patryk

CEO Webinsider.pl, a do tego CTO, CIO, CFO, CMO, CSO, COO i CRO ;-)
Pasjonat nowych technologii - od sprzętu po oprogramowanie, od serwerów po smartfony i rozwiązania IoT. Potencjalnie kiepski bloger, bo nie robi zdjęć "talerza" zanim zacznie jeść.

Dumny przyjaciel swoich psów :-)
Revolut: Lepsze niż Twoje obecne konto bankowe