Scripts de inicialização. Distinção da inicialização e atividade inicial

2

Eu tenho um script que executa e desliga alguns serviços colocados em /etc/init.d . Possui link simbólico em /etc/rc5.d adicionado com chkconfig para o autolaunch na inicialização. Portanto, ele é iniciado na inicialização e pode ser controlado manualmente por service myscript start , service myscript stop etc pelo usuário. Como é sabido, a sequência descrita na seção start é executada na inicialização. Mas eu também preciso executar alguma atividade somente na inicialização sem dar acesso explícito para executar essa atividade manualmente pelo usuário quando o sistema já estiver inicializado. Em este artigo é descrito que podemos adicionar boot() sequence ao script e ele será executado somente no boot . Mas essa coisa não funciona. Eu tentei maneiras diferentes: escrevendo como boot() e function boot() , mas o resultado é o mesmo: não funciona. Portanto, há algumas questões que ocorrem: é um recurso específico da distribuição ou pode ser que essa sequência esteja em determinado local do script? Se ambos estiverem errados (ou talvez se todas essas coisas com boot() estiverem incorretas ou obsoletas), como posso executar algumas ações apenas na inicialização? Meu sistema é Linux Red Hat Enterprise 6 .

Aqui está o meu script:

#!/bin/bash
#Some comments here

#some inclusions of another scripts here

function startService()
{
      #some activity for launching
}
boot()
{
        #That's it. Here I want to perform some preparations (remove files)
        #and then launch starting sequence:
        if [ -f "somefilename" ]
        then
            rm -f "somefilename"
        fi
        startService
}
function stopService()
{
        #Activity for stopping
}

#Some functions for service's status retrieving here

case "$1" in
        start)
                startService
                ;;
        stop)
                stopService
                ;;
        status)
                #Calls of status functions
                ;;
        *)
                echo "Usage: {start | stop | status}"
                exit 1
                ;;
esac

Obrigado antecipadamente.

    
por Toniy 30.10.2015 / 07:34

1 resposta

0

Não estou familiarizado com scripts de inicialização que tenham uma seção de inicialização (), portanto, pode ser algo específico para OpenWRT ou busybox. No RHEL6, os scripts init só são chamados com um parâmetro "start", nunca um parâmetro "boot".

Para fazer com que um script seja executado na inicialização no RHEL6, você precisa configurar um "arquivo conf" para o Upstart no diretório / etc / init. Eu sugeriria ver o /etc/init/rc.conf como um exemplo inicial. Nomeie-o como myscript.conf e preencha com algo parecido com isto:

# adjust the runlevels if you don't want to run myscript in every runlevel
start on runlevel [0123456]

# this tells init to just run this once and let it exit
task

# if you want to see the output from your script on the console, use the following line; otherwise remove it
console output

# call myscript with a boot flag (to keep one copy of your script in /etc/init.d; adjust this if you'd rather have a separate boot-script)
exec /etc/init.d/myscript boot

Veja mais informações sobre o init do upstart em man -s5 init .

    
por 02.11.2015 / 14:52