Como posso fazer um script em /etc/init.d iniciar na inicialização?

77

Acho que li algo há algum tempo, mas não me lembro como é feito. Essencialmente, tenho um serviço em /etc/init.d , que gostaria de iniciar automaticamente no momento da inicialização. Eu lembro que tem algo a ver com o symlinking do script no diretório /etc/rc.d , mas não me lembro no presente. Qual é o comando para isso?

Acredito que estou em um derivado do Fedora / CentOS.

    
por Naftuli Kay 09.09.2011 / 01:21

3 respostas

98

Se você está em um sistema baseado no Red Hat, como você mencionou, você pode fazer o seguinte:

  1. Crie um script e coloque em /etc/init.d (por exemplo, /etc/init.d/myscript ). O script deve ter o seguinte formato:
#!/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 

O formato é bastante normal e você pode ver os scripts existentes em /etc/init.d . Você pode então usar o script como /etc/init.d/myscript start ou chkconfig myscript start . A página ckconfig man explica o cabeçalho do script:

 > 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.

O código de início, parada e status do exemplo usa funções auxiliares definidas em /etc/init.d/functions

  1. Ativar o script

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. Verifique se o script está realmente ativado - você deve ver "on" nos níveis selecionados.

    $ chkconfig --list | grep myscript
    

Espero que seja isso o que você estava procurando.

    
por 09.09.2011 / 05:28
10

Você testa em que nível de execução sua máquina normalmente inicia.

runlevel

Muitas vezes isso é 5 ou 2 - existem várias convenções, mas nada realmente estabelecido, afaik. O Ubuntu usa 2, enquanto a antiga distribuição que usei sempre usava

  • 1 usuário único (superusuário)
  • 2 usuários múltiplos
  • 3 multiusuário + rede
  • 4 não usado / definível pelo usuário
  • 5 usuários múltiplos, rede + X11

Então você faz um link simbólico a partir do seu script de inicialização, talvez /etc/init.d/foobar to /etc/rc2.d/SXYfoobar

S significa 'Inicie este script neste runlevel (aqui: 2). XY é um número decimal de dois dígitos, o que é relevante para a sequência, os scripts são iniciados.

Se você depender do script S45barfoo para ser executado antes de você, e S55foofoo estiver dependendo do seu script, você escolherá xy entre 45 e 55. Para números iguais, a ordem de inicialização é indefinida.

O Ubuntu, enquanto isso, alternou (está alternando) para outro procedimento de inicialização, chamado upstart .

E nota: Nem sempre os links apontam para /etc/rcX.d - às vezes é /etc/init/rcX.d ou algo semelhante, mas deve ser fácil de encontrar, em algum lugar abaixo de / etc.

Se você deseja iniciar algo no final dos scripts de inicialização, /etc/rc.local seria o arquivo a ser pesquisado, mas se depender do X11 já em execução, você pode procurar uma opção de inicialização automática do ambiente de área de trabalho ou /etc/X11/Xsession.d/ com um padrão semelhante ao descrito acima.

Se você depende da rede, existe um diretório separado (if-up.d) e, para dispositivos montados como unidades USB externas, /etc/udev/rules.d/ .

    
por 09.09.2011 / 04:37
3

Como Naftuli Tzvi Kay perguntou sobre o Debian acima: Começando com o Debian 6, seu script deve conter um cabeçalho LSB (Linux Standards Base) que indica suas dependências e capacidades ( veja a página wiki debian ).

Se um cabeçalho LSB estiver presente, você pode usar insserv para incluir seu script no processo de inicialização ( veja outra página wiki debian ).

    
por 14.10.2013 / 10:34