script init.d non in esecuzione all'avvio


15

Sto ospitando alcuni server di gioco Counter-Strike sul mio server dedicato usando lo schermo. Ho questo script che eseguo quando voglio avviare / arrestare i server:

#! /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

Ho inserito questo script (chiamato css-servers) /etc/init.d/e, a mia conoscenza, ciò significa che viene eseguito all'avvio del sistema. Tuttavia quando controllo le schermate attive usando screen -lsnon ce ne sono in esecuzione.

Come posso farli funzionare all'avvio con Ubuntu Server?

Risposte:


33

Il solo fatto di avere lo script presente /etc/init.dnon è sufficiente per eseguirlo all'avvio.

Per aggiungerlo al tuo avvio, devi dirlo a Ubuntu:

sudo update-rc.d css-servers defaults

Dovrebbe quindi avviarsi al prossimo avvio, se lo script è formattato correttamente, il set di bit eseguibili, ecc. I pacchetti installati da apt-get/ Software Center eseguono automaticamente questo comando o il suo equivalente per te, motivo per cui di solito non devi preoccuparti a proposito.

Se vuoi avviarlo immediatamente, puoi chiamarlo direttamente:

sudo service css-servers start

Questo è estremamente strano. Fino a questo punto il mio script viene eseguito all'avvio senza questo update-rc.dcomando. Ho aggiornato il mio script, quindi non è stato più eseguito fino a quando non ho eseguito questo comando. Grazie. A proposito, come possiamo "annullare la registrazione" dall'esecuzione all'avvio (come abbiamo fatto con update-rc.d)?
Nikos,

1
@ Nik-Lz Queste domande e risposte si riferiscono a versioni vecchie e obsolete di Ubuntu che utilizzavano upstart. Non dovrebbe più essere usato, invece dovrebbe essere usato l'attuale systemd (che usa un sistema di servizio completamente diverso).
Michael Hampton,

7

Hai finito la prima parte. /etc/init.dè da dove vengono eseguiti gli script di inizializzazione. Tuttavia, non vengono eseguiti automaticamente.

Vengono eseguiti nell'ordine specificato dai collegamenti simbolici delle /etc/rc*.ddirectory. Ogni livello di esecuzione ha la propria directory. Gli script con nomi di collegamenti che iniziano con Kvengono eseguiti con il pararmeter di arresto e quelli con nomi che iniziano con Svengono eseguiti con il parametro start. Per convenzione, i nomi dei file iniziano con Ko Sseguiti da un numero di due cifre usato per il sequenziamento e termina con il nome dello script in /etc/init.d.

I collegamenti possono essere creati manualmente, ma generalmente vengono creati con uno script. Lo script generico update-rc.dè disponibile su Ubuntu. Il comando man update-rc.dti fornirà la documentazione su chi usarlo. Nel tuo caso prova:

sudo update-rc.d css-servers defaults

Per avviarlo usando lo script init, prova:

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

In genere avvio e arresto il server in questo modo per assicurarmi che lo script funzioni come desiderato. Quindi corro update-rc.dper aggiungerlo alle /etc/rc.ddirectory del runlevel.


1

Se non si ottiene alcun indizio sul motivo per cui il servizio non viene avviato all'avvio. Tuttavia, funziona correttamente quando si tenta di avviare il servizio manualmente service <your service> start. In tal caso, provare a reindirizzare l'output standard e l'output di errore su alcuni file. Il che potrebbe darti qualche indizio sul perché non si avvii durante l'avvio del sistema.

ad es. all'interno della tua sceneggiatura

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.