O script init.d não está sendo executado na inicialização

15

Estou hospedando alguns servidores de jogos Counter-Strike no meu servidor dedicado usando a tela. Eu tenho esse script que eu executo quando quero iniciar / parar os servidores:

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

Eu coloquei esse script (chamado css-servers) dentro /etc/init.d/do meu conhecimento e isso significa que ele é executado quando o sistema inicializa. No entanto, quando verifico as telas ativas, screen -lsnão há nenhuma em execução.

Como posso fazer isso rodar na inicialização no Ubuntu Server?

Mark Twaign
fonte

Respostas:

33

Apenas ter o script presente /etc/init.dnão é suficiente para executá-lo na inicialização.

Para adicioná-lo à sua inicialização, você precisa informar ao Ubuntu:

sudo update-rc.d css-servers defaults

Em seguida, ele deve iniciar na próxima inicialização, se o script estiver formatado corretamente, definido como conjunto de bits, etc. Os pacotes que você instala no apt-get/ Software Center executam esse comando ou seu equivalente automaticamente, e é por isso que você geralmente não precisa se preocupar. sobre isso.

Se você deseja iniciá-lo imediatamente, pode chamá-lo diretamente:

sudo service css-servers start
Michael Hampton
fonte
Isso é extremamente estranho. Até esse ponto, meu script é executado na inicialização sem esse update-rc.dcomando. Atualizei meu script e ele não funcionou mais até executar este comando. Obrigado. A propósito, como podemos "cancelar o registro" da execução na inicialização (como fizemos com o update-rc.d)?
Nikos
1
@ Nik-Lz Esta seção de perguntas e respostas refere-se a versões antigas e obsoletas do Ubuntu, que usavam upstart. Ele não deve mais ser usado, em vez disso, o systemd atual (que usa um sistema de serviço completamente diferente) deve ser usado.
Michael Hampton
7

Você tem a primeira parte pronta. /etc/init.dé onde os scripts de inicialização são executados. No entanto, eles não são executados automaticamente.

Eles são executados em ordem, conforme especificado pelos links simbólicos dos /etc/rc*.ddiretórios. Cada nível de execução possui seu próprio diretório. Scripts com nomes de links iniciados com Ksão executados com o stop stopmeter e aqueles com nomes iniciados com Ssão executados com o parâmetro start. Por convenção, os nomes dos arquivos começam com Kou são Sseguidos por um número de dois dígitos usado para sequenciar e terminam com o nome do script em/etc/init.d .

Os links podem ser criados manualmente, mas geralmente são criados com um script. O script genérico update-rc.destá disponível no Ubuntu. O comando man update-rc.dfornecerá documentação sobre quem usá-lo. No seu caso, tente:

sudo update-rc.d css-servers defaults

Para iniciá-lo usando o script init, tente:

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

Geralmente, inicio e paro o servidor dessa maneira para garantir que o script esteja funcionando conforme desejado. Então eu corro update-rc.dpara adicioná-lo aos /etc/rc.ddiretórios do nível de execução.

BillThor
fonte
1

Se você não está entendendo por que o serviço não está sendo iniciado na inicialização. No entanto, ele funciona corretamente quando você tenta iniciar o serviço manualmente service <your service> start. Nesse caso, tente redirecionar a saída padrão e a saída de erro para algum arquivo. O que pode lhe dar uma pista de por que ele não está sendo iniciado durante a inicialização do sistema.

por exemplo, dentro do seu script

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
fonte