/etc/init.d/ czyli jak poprawnie uruchamiać usługi

Bardzo często spotykam się z tym, że skompilowane oprogramowanie które ma pracować cały czas na Raspberry PI (i pochodnych) jest dodawane do autostartu w pliku /etc/rc.local. O ile ta metoda jest skuteczna to można to zrobić ładniej, bardziej Linuksowo.

Wszelkie skrypty startowe na wielu platformach ARM z zainstalowanym Linuksem (Raspberry Pi, NanoPi, itd) są położone głównie w katalogu /etc/init.d/. Jeżeli chcemy aby konkretny program (np. direwolf) startował jako usługa wystarczy ściągnąć i skopiować do katalogu /etc/init.d/ skrypt który udostępniłem na swoim koncie github. Po jego ściągnięciu edytujemy linijki 14-16 określając gdzie jest program który chcemy aby działał w tle, ścieżkę do pliku wraz z parametrami wymaganymi do jego uruchomienia oraz nazwę użytkownika na którym będzie działał ten program. Dodatkowo możemy ustawić gdzie mają być zapisywane logi z działania programu (domyślenie /dev/null czyli nigdzie).

dir="/usr/bin"
cmd="/usr/bin/direwolf -c /etc/direwolf.conf -t 0"
user="root"

name=`basename $0`
pid_file="/var/run/$name.pid"
# stdout_log="/var/log/$name.log"
stdout_log="/dev/null"
stderr_log="/var/log/$name.err"

Po zakończonej edycji plik kopiujemy do katalogu /etc/init.d/ a następnie wykonujemy polecenie:

update-rc.d direwolf defaults
update-rc.d direwolf enable

Warningami się nie przejmujemy 🙂

Teraz wystarczy zrestartować nasz komputer i zweryfikować, że usługa się faktycznie uruchomiła lub wykonać polecenie:

/etc/init.d/direwolf start

i skrypt który został utworzony powinien uruchomić w tle nasz program (w tym wypadku direwolf).