skrypt init.d nie działa podczas uruchamiania

15

Hostuję niektóre serwery gier Counter-Strike na moim serwerze dedykowanym za pomocą screena. Mam ten skrypt, który uruchamiam, gdy chcę uruchomić / zatrzymać serwery:

#! /bin/sh
# /etc/init.d/css-server
#

case "$1" in
  start)
    echo "Starting Nullus Imprimis war server..."
    screen -A -m -d -S css-war-server /home/css-servers/war-server/css/srcds_run -game cstrike +map de_dust2 +maxplayers 16 -autoupdate -port 2555 -tick 100 
    echo "Nullus Imprimis war server started"
    echo "Starting Nullus Imprimis pub server #1..."
    screen -A -m -d -S css-pub-server-1 /home/css-servers/pub-server-1/css/srcds_run -game cstrike +map de_dust2 +maxplayers 32 -autoupdate -port 2666 -tickrate 100
    echo "Nullus Imprimis pub server #1 started"
    ;;
  stop)
    echo "Stopping Nullus Imprimis war server..."
    screen -S css-war-server -X quit
    echo "Nullus Imprimis war server stopped"
    echo "Stopping Nullus Imprimis pub server #1..."
    screen -S css-pub-server-1 -X quit
    echo "Nullus Imprimis pub server #1 stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/css-servers {start|stop}"
    exit 1
    ;;
esac

exit 0

Umieszczam ten skrypt (wywoływany css-servers) /etc/init.d/i według mojej wiedzy oznacza to, że uruchamia się on podczas uruchamiania systemu. Jednak gdy sprawdzam za pomocą aktywnych ekranów, screen -lsżadne nie są uruchomione.

Jak mogę je uruchomić przy starcie systemu Ubuntu Server?

Mark Twaign
źródło

Odpowiedzi:

33

Samo włączenie skryptu /etc/init.dnie wystarcza do uruchomienia go podczas uruchamiania.

Aby dodać go do swojego startupu, musisz powiedzieć o tym Ubuntu:

sudo update-rc.d css-servers defaults

Powinien następnie uruchomić się przy następnym uruchomieniu, jeśli skrypt jest poprawnie sformatowany, zestaw bitów wykonywalnych itp. Pakiety, które instalujesz z apt-get/ Software Center, automatycznie uruchamiają tę komendę lub jej odpowiednik, dlatego zwykle nie musisz się martwić o tym.

Jeśli chcesz go uruchomić natychmiast, możesz zadzwonić bezpośrednio:

sudo service css-servers start
Michael Hampton
źródło
To jest bardzo dziwne. Do tego momentu mój skrypt działał przy uruchomieniu bez tego update-rc.dpolecenia. Zaktualizowałem skrypt, który przestał działać, dopóki nie uruchomię tego polecenia. Dzięki. Nawiasem mówiąc, w jaki sposób możemy „wyrejestrować” go z uruchamiania podczas uruchamiania (tak jak to zrobiliśmy z update-rc.d)?
Nikos
1
@ Nik-Lz To pytanie dotyczy starych i przestarzałych wersji Ubuntu, które używały upstartu. Nie należy go już używać, zamiast tego należy użyć obecnego systemd (który używa zupełnie innego systemu usług).
Michael Hampton
7

Wykonałeś pierwszą część. /etc/init.djest miejscem, z którego uruchamiane są skrypty inicjujące. Nie są one jednak uruchamiane automatycznie.

Są one uruchamiane w kolejności określonej przez dowiązania symboliczne do /etc/rc*.dkatalogów. Każdy poziom uruchamiania ma własny katalog. Skrypty z nazwami łączy rozpoczynającymi się od Ksą uruchamiane z parametrem zatrzymania, a skrypty z nazwami rozpoczynającymi się Ssą uruchamiane z parametrem start. Umownie nazwy plików zaczynają się Klub Snastępuje liczba dwucyfrowa używanego do sekwencjonowania, a kończąc na nazwę skryptu /etc/init.d.

Linki mogą być tworzone ręcznie, ale generalnie są tworzone za pomocą skryptu. Ogólny skrypt update-rc.djest dostępny na Ubuntu. Polecenie man update-rc.ddostarczy ci dokumentacji na temat tego, z kogo z niego korzystać. W twoim przypadku spróbuj:

sudo update-rc.d css-servers defaults

Aby uruchomić go za pomocą skryptu inicjującego, spróbuj:

sudo /etc/init.d/css-servers start

Generalnie uruchamiam i zatrzymuję serwer w ten sposób, aby skrypt działał zgodnie z oczekiwaniami. Następnie biegnę, update-rc.daby dodać go do /etc/rc.dkatalogów poziomu pracy.

BillThor
źródło
1

Jeśli nie otrzymujesz pojęcia, dlaczego usługa nie uruchamia się podczas rozruchu. Działa jednak poprawnie, gdy próbujesz uruchomić usługę ręcznie service <your service> start. W takim przypadku spróbuj przekierować standardowe wyjście i wyjście błędu do jakiegoś pliku. Co może dać ci pewną wskazówkę, dlaczego nie uruchamia się podczas uruchamiania systemu.

np. w twoim skrypcie

case "$1" in
  start)
    echo "Starting Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  stop)
    echo "Stopping Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  *)
    echo "Usage: /etc/init.d/test {start|stop}"
    exit 1
    ;;
esac

exit 0
Pandurang Patil
źródło