Wiele lat temu możemy napisać nasz skrypt startowy /etc/rc.local
. Po załadowaniu wszystkich usług systemowych skrypt zostanie uruchomiony.
Teraz używamy systemd, nie mamy rc.local
już. Systemd uruchamia usługę równolegle. Możesz napisać własną usługę, aby działała rc.local`, ale nie możesz upewnić się, że będzie działać po załadowaniu wszystkich usług systemowych.
Czy jest na to sposób? Czy musimy użyć Before
i After
w usłudze systemowej pliku?
Odpowiedzi:
W systemie zaleca się korzystanie z usług
Before=
i porządne zamawianie ichAfter=
wokół innych.Ale ponieważ poprosiłeś o sposób bez użycia
Before
iAfter
, możesz użyć:co
man systemd.service
wyjaśnia:źródło
/proc/sys/kernel/modules_disabled
, aby1
pod koniec procesu ładowaniaTo naprawdę zależy od twojej definicji „bootowanego”. Zakładam, że chcesz, aby działał natychmiast po uruchomieniu getty. Aby to zrobić, musisz dodać swoją usługę do
/etc/systemd/system/getty.target.wants/
katalogu. Należy również upewnić się, że plik używa kodu podobnego do innych usług w tym katalogu. Aby uruchomić niestandardową usługę przy uruchamianiu i zamykaniu systemu (wystarczy wydać sygnał dźwiękowy brzęczyka płyty głównej), używam następującego skryptu/etc/systemd/system/getty.target.wants/service_name.service
/usr/bin/myinitscript.sh
jest wykonywalny i ma shebang na początku.Zauważ, że nie wszystko rozpocznie się w tym momencie bootowania, ale w tym momencie użytkownik wyświetla monit
Chociaż to się przydaje
Before=
iAfter=
było dla mnie o wiele bardziej zrozumiałe i faktycznie działa; Nie znalazłem powyższej odpowiedzi wystarczająco pouczającej. Pozwala to również na korzystanie z obu tych opcjiExecStart=
iExecStop=
nie ogranicza sięType=simple
do usługi podobnej do podobnej.źródło
Nie znam się na szczegółach ani ArchLinux, ale oto jak ogólnie zarządzać systemem.
Zasadniczo systemd to zbiór skryptów w /etc/init.d/, które są wskazywane przez dowiązania symboliczne z /etc/rcX.d, gdzie X jest liczbą poziomów uruchamiania. Same dowiązania symboliczne mają następujący format:
gdzie:
Jeśli więc chcesz, aby skrypt był uruchamiany jako ostatni w sekwencji rozruchowej, musisz wykonać następujące czynności:
runlevel
ls /etc/rc<target runlevel>.d/
i wybierz dwucyfrową liczbę, która jest większa niż jakikolwiek inny już tam dostępny.update-rc.d
oparte na Debianie lub podobnechkconfig
do Fedory lub ręcznie, utwórz dowiązanie symboliczne /etc/rc.d/S do skryptu inicjującego.źródło