Como executar um script de shell na inicialização?

13

Eu criei um script para iniciar um servidor (minha primeira pergunta). Agora quero que ele seja executado na inicialização do sistema e inicie o servidor definido. O que devo fazer para conseguir isso?

Minhas descobertas me dizem que coloque este arquivo no local /etc/init.d e ele será executado quando o sistema for inicializado. Mas eu não sou capaz de entender como o primeiro argumento na inicialização será start ? Isso é predefinido em algum lugar para usar start as $1 ? Se eu quiser ter um caso startall que iniciará todos os servidores no script, quais são as opções que eu posso gerenciar?

Meu script é assim:

#!/bin/bash

case "$1" in
start)
     start
    ;;
stop)
    stop
    ;;

restart)
    $0 stop
    $0 start
    ;;
*)
    echo "usage: $0 (start|stop|restart)"
;;
esac
    
por vijay.shad 31.03.2010 / 17:13

3 respostas

18

/etc/init.d é o diretório de script, no qual os scripts executáveis aparecem. No entanto, para executar scripts em uma ordem específica após o início do sistema, você precisa adicionar arquivos ao diretório /etc/rc#.d . As entradas que aparecem aqui informam seu sistema em qual ordem e em quais scripts de nível de execução em /etc/init.d devem ser executados. O número após o rc indica em qual nível de execução a máquina está rodando, de acordo com este gráfico:

link

Então, se você tiver:

/etc/init.d/importantscript

Então você precisa dos arquivos (vazios):

/etc/rc.d/rc3.d/S20importantscript
/etc/rc.d/rc6.d/K20importantscript

O S significa iniciar e o K significa matar. Quando sua máquina iniciar, o sistema dirá "Ah, estou rodando em RunLevel 3, vamos pular para rc3.d para ver quais scripts em '/etc/init.d' precisam ser executados e em qual ordem." Nesse caso, o sistema classificará por 'S' e depois o número após 'S' e executará '/etc/init.d/importantscript start'. O 20 é apenas para fins de encomenda ... o seu script será executado por trás do 'S19' e em frente ao 'S21'. Você pode criar esses arquivos simplesmente fazendo:

sudo touch /etc/rc.d/rc3.d/S20importantscript

Aqui está um bom resumo: link

    
por 31.03.2010 / 18:00
8

Você não precisa --- e não deve --- criar arquivos em /etc/rc.d/rcN.d/ ; o que você deve fazer é colocar um comentário em seu script de inicialização lendo

# chkconfig NNN A B

em que NNN é o conjunto de níveis de execução nos quais você deseja que o script esteja ativo (por exemplo, 345 se estiver ativo em runlevels 3 , 4 e 5 ) e A e B são as prioridades de início e parada. Então, chkconfig --add foo (assumindo que seu script se chama foo ) criará os arquivos em /etc/rc.d/rcN.d/ com os nomes apropriados.

Você pode usar service foo bar para enviar a mensagem bar ao seu script (por exemplo, start , stop , o que for - é de onde vem o $1 ).

    
por 07.02.2012 / 11:34
0

O $ 1 é o argumento da linha de comando que é passado para o seu script, é um dos iniciar, parar ou reiniciar. Em openSUSE , não me lembro de ter a opção de passar outros argumentos para o script ao usar o editor de runlevel, então Eu acho que estes são provavelmente os únicos que você deve usar.

Eu não uso CentOS , mas parece que o programa para controlar o que é iniciado em qual runlevel é ntsysv .

    
por 31.03.2010 / 17:34