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…
Spis treści w artykule
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:
- Raspberry Pi: Dysk w pamięci RAM (RAMdysk / RAMdisk)
- Copy.com jako narzędzie kopii zapasowej serwera
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
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
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01
Mam pytanie do twórcy, jeśli uruchamiam jakiś skrypt przy starcie i chce wiedzieć co mi wyrzuca w konsoli jak najlepiej to podejrzeć. Mam jakieś dane pobierane co jakiś czas i chce zobaczyć ich wartości, najlepiej żeby okno samo się uruchamiało po starcie ???