Jak mogę zrobić skrypt w /etc/init.d uruchamiany przy starcie systemu?


83

Myślę, że już coś o tym czytałem, ale nie pamiętam, jak to się robi. Zasadniczo mam usługę, w /etc/init.dktórej chciałbym uruchomić się automatycznie podczas rozruchu. Pamiętam, że ma to coś wspólnego z symlinkowaniem skryptu do /etc/rc.dkatalogu, ale obecnie nie pamiętam. Jakie jest na to polecenie?

Wierzę, że jestem na pochodnej Fedory / CentOS.


To zależy od twojego systemu operacyjnego. Jaki wariant unixa używasz, a jeśli Linux, jaką dystrybucję? Które spośród /etc/init, /etc/init.d, /etc/rc.d, /etc/rc.locali kilka innych to ma?
— Gilles

1
Myślę, że jestem na CentOS lub coś w tym stylu. Czy odpowiedź byłaby inna w przypadku Debiana? Interesuje mnie również rozwiązanie dla Debiana.
— Naftuli Kay,

Odpowiedzi:


109

Jeśli korzystasz z systemu opartego na systemie Red Hat, jak wspomniałeś, możesz wykonać następujące czynności:

  1. Utwórz skrypt i umieść w /etc/init.d(np /etc/init.d/myscript.). Skrypt powinien mieć następujący format:
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    # code to start app comes here 
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here 
    # example: killproc program_name
}

case "$1" in 
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here 
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0 

Format jest dość standardowy i możesz przeglądać istniejące skrypty w /etc/init.d. Następnie możesz użyć skryptu tak /etc/init.d/myscript startlub chkconfig myscript start. ckconfigStrona podręcznika wyjaśnia nagłówka skryptu:

 > This says that the script should be started in levels 2,  3,  4, and
 > 5, that its start priority should be 20, and that its stop priority
 > should be 80.

Przykładowy kod start, stop i status wykorzystuje funkcje pomocnicze zdefiniowane w /etc/init.d/functions

  1. Włącz skrypt

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. Sprawdź, czy skrypt jest rzeczywiście włączony - powinieneś zobaczyć „on” dla wybranych poziomów.

    $ chkconfig --list | grep myscript
    

3
Chkconfig jest tym, czego chcesz. +1
— whoami

Dlaczego init zaczął coś na poziomach 2, 3, 4 i 5? Czy nie musisz uważać, aby nie uruchomić serwera na poziomie 2? I tak zresztą poziom pracy 4 nie jest zdefiniowany w RHEL, więc po co próbować uruchomić go na tym poziomie pracy? Nie krytyka, tylko chcę wiedzieć. Jestem rodzimym użytkownikiem Slackware.
— Bruce Ediger,

4 nie jest zdefiniowane w RHEL, ale istnieje. Możesz go ukraść dla własnych rzeczy.
— Kevin M,

Nagłówek pochodzi ze strony man chkconfig. W większości przypadków osobiście trzymam się 235 lub tylko 35.
— canen,

Czy jest dziennik, który mogę sprawdzić, jeśli coś się nie uruchomi podczas uruchamiania?
— Utkarsh Sinha

10

Testujesz, na jakim poziomie uruchomieniowym normalnie zaczyna się Twoja maszyna.

runlevel

Często jest to 5 lub 2 - istnieją różne konwencje, ale tak naprawdę nic nie ustalono, afaik. Ubuntu używa 2, podczas gdy poprzednia dystrybucja, z której korzystałem, zawsze była używana

  • 1 pojedynczy użytkownik (superużytkownik)
  • 2 wielu użytkowników
  • 3 wielu użytkowników + sieć
  • 4 nieużywane / definiowane przez użytkownika
  • 5 wielu użytkowników, sieć + X11

Następnie tworzysz dowiązanie symboliczne ze skryptu inicjującego, może /etc/init.d/foobardo/etc/rc2.d/SXYfoobar

S oznacza „Uruchom ten skrypt na tym poziomie działania (tutaj: 2). XY jest dwucyfrową liczbą dziesiętną, która jest istotna dla sekwencji, skrypty są uruchamiane.

Jeśli zależysz od skryptu S45barfoo, który ma zostać uruchomiony przed Tobą, a S55foofoo zależy od skryptu, wybierz xy między 45 a 55. Dla równych liczb kolejność rozruchu jest niezdefiniowana.

Tymczasem Ubuntu przełączył się na inną procedurę uruchamiania, zwaną upstart.

I uwaga: nie zawsze linki prowadzą do /etc/rcX.d- czasem jest /etc/init/rcX.dlub coś podobnego, ale powinno być łatwe do znalezienia, gdzieś poniżej / etc.

Jeśli chcesz uruchomić coś na końcu skryptów startowych, /etc/rc.localznajdź plik, którego szukasz, ale jeśli zależy to od X11 już uruchomionego, możesz poszukać opcji autostartu środowiska pulpitu lub /etc/X11/Xsession.d/z podobnym wzorcem jak opisano powyżej.

Jeśli zależysz od działającej sieci, istnieje osobny katalog (if-up.d) i dla podłączonych urządzeń, takich jak zewnętrzne napędy USB /etc/udev/rules.d/.


Czy nie ma dla ciebie polecenia, które symbolizuje dowiązanie symboliczne? Myślałem, że pamiętam coś takiego.
— Naftuli Kay,

1
Prawda update-rc.d?
— Naftuli Kay

GUI czy wiersz poleceń? Twój DE może dostarczyć narzędzie do oznaczania poziomów uruchamiania, od którego można rozpocząć lub zatrzymać skrypt. Widziałem coś takiego, ale nie pamiętam nazwy i jak określić liczbę (xy).
— użytkownik nieznany

Wiersz poleceń. Obsługuje dla ciebie symlinkowanie i pozwala przełączać przełączniki na to, czy niektóre skrypty działają, czy nie.
— Naftuli Kay,

3

Jak Naftuli Tzvi Kay pytał o Debiana powyżej: Począwszy od Debiana 6, twój skrypt powinien zawierać nagłówek LSB (Linux Standards Base), który wskazuje na jego zależności i możliwości ( patrz strona wiki Debiana ).

Jeśli obecny jest nagłówek LSB, możesz użyć go insservdo włączenia skryptu w proces rozruchu ( zobacz inną stronę wiki Debiana ).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.