Tutorial sobre scripts de inicialização do Linux
Excelente tutorial encontrado em :
http://dicaslinux.linuxsecurity.com.br/?modulo=artigos&acao=ver®istro=7
Ele ajuda a fazer scripts que autoexecutam com o iniciar ou desligar do pc
Autor : Rodrigo P. Telles - telles@hypermall.com.br
SYSV-Scripts
Eu tenho percebido que algumas pessoas estão tendo problemas para adicionar scripts de controle de ações durante o BOOT e HALT do linux, então resolví escrever esse pequeno how-to sobre o assunto.
Em primeiro lugar é preciso entender o esquema do SYSV.
O SYSV está incluído na maioria das distribuições Linux (principalmente as que estão baseadas no RedHat) e funciona na seguinte estrutura de diretórios:
/etc/rc.dOBS: Dependendo da versão do SYSV e da distribuição esse esquema pode aparecer no diretório "/etc/rc.d/"
/etc/rc0.d --> 0 - halt
/etc/rc1.d --> 1 - Single User
/etc/rc2.d --> 2 - Multiusuário, sem NFS
/etc/rc3.d --> 3 - Modo multiusuário completo
/etc/rc4.d --> 4 - Não usado
/etc/rc5.d --> 5 - Start em X11
/etc/rc6.d --> 6 - Reboot
Dentro desses diretórios curiosamente só existem links simbólicos que apontam para o script real que deve estar em "/etc/rc.d/init.d/", e os links também curiosamente começam com "S" ou "K" seguidos de um número no formato decimal (2 casas - Ex: 10,85,99,etc) e o nome pelo qual o SYSV o identificará.
Ex: S95gpmEsse formato siginifica:
S --> StartOu seja, se o link for "K10gpm" ele será o décimo script executado com o parâmetro "stop" (K10gpm stop) em tempo de BOOT, e se for "S10gpm" ele será o décimo script executado com o parâmetro "start" (S10gpm start), sendo assim o SYSV entende que alguns scripts são ou precisam ser executados antes ou depois de outros scripts. Ficou complicado ?
K --> Stop
95 --> Sequência que o script será executado em tempo de BOOT.
Um exemplo que pode ser citado sobre essa ordem são os scripts que precisam de networking (rede) já funcionando para poderem ser startados:
Ex:
/etc/rc3.d/S20network --> Start de número 20
/etc/rc3.d/S25squid --> Start de número 25
Essa sequência está correta, pois o DAEMON (Servidor) Squid (Proxy) precisa que os serviços de rede já estejam funcionando para poder startar com sucesso.
A numeração inversa dos scripts faria com que o script do squid falhasse:
/etc/rc3.d/S25network --> Start de número 25
/etc/rc3.d/S20squid --> Start de número 20
Nesse esquema significa que todo link/script (executável - rx) que estiver dentro do diretório:
"/etc/rc0.d" será executado no "HALT" com o parâmetro referente a sua letra (S ou K) em uma sequência determinada (05,10,etc).
"/etc/rc1.d" será executado em "Single Mode" (Safe Mode) com o parâmetro referente a sua letra (S ou K) em uma sequência determinada (05,10,etc).
"/etc/rc2.d/" será executado em "Multiusuário, sem NFS" com o parâmetro referente a sua letra (S ou K) em uma sequência determinada (05,10,etc).
"/etc/rc3.d" será executado em "Multiusuário completo" com o parâmetro referente a sua letra (S ou K) em uma sequência determinada (05,10,etc).
"/etc/rc4.d" não será utilizado.
"/etc/rc5.d" será executado em "X11" (modo gráfico - com as novas distribuições que utilizam instalação gráfica isso é comum) com o parâmetro referente a sua letra (S ou K) em uma sequência determinada (05,10,etc).
"/etc/rc6.d" será executado em "Reboot" com o parâmetro referente a sua letra (S ou K) em uma sequência determinada (05,10,etc).
Acho que agora você deve estar começando a entender essa bagunça toda de letras, números e diretórios certo ?
Espero que sim...mas também deve estar se perguntando como inserir um script em todos esse diretórios de uma vez só, e como deve ser esse script ?
Certo, vamos ao que interessa agora.
Construindo scripts compatíveis com o SYSV:
1 - O script precisa começar (primeira linha) com
#!/bin/bashÉ isso mesmo, mais números :^)
ou
#!/bin/sh
2 - O script precisa ter a seguinte linha
# chkconfig: 2345 85 15
Essa linha significa:
chkconfig --> aplicação que vai adicionar o script no SYSV 2345 --> níveis (diretórios) aonde o link para o script vai ser adicionado para start
85 --> sequência de "start"
15 --> sequência de "stop"
Vale lembrar que os níveis que não forem adicionados para start (S) serão automaticamente marcados para stop (K), no nosso caso será 016 (0,1 e 6).
3 - O script precisa ter uma descrição
# description: Aqui você coloca a descrição do seu script
4 - O script pode executar o script de funções do sistema
[ root@localhost /]# "/etc/rc.d/init.d/functions" para poder mostrar as mensagens de "OK", "FAILED" e "PASSED", existem outras funções que podem ser utilizadas, recomendo uma breve "fuçada" nesse script.
Lembre-se que isso é opcional, mas o seu uso é recomendado.
4- O script precisa ter sessões de "start" e "stop" (outras são opcionais).
OBS: Todas as linhas que tem sustenido (#) no início precisam realmente estar comentadas.
Agora vamos escrever um script de exemplo que apenas mostra mensagens no console, como "Isso é um teste..." e "Isso não é um teste...":
#!/bin/bashSalve esse script com o nome "meuscript".
#
# chkconfig: 235 65 40
# description: Esse script é apenas um exemplo de scripts SYSV
#
. /etc/rc.d/init.d/functions #<-- essa linha é opcional #Se você optar por não utilizar essa linha, substitua #o comando "gprintf" por "printf". case "$1" in start) gprintf "Starting %s services: " "meuscript" printf "Isso é um teste..." echo ;; stop) gprintf "Stoping %s services: " "meuscript" printf "Isso não é um teste..." echo ;; restart) #<--opcional $0 stop $0 start ;; *) gprintf "Modo de usar: %s {start|stop|restart} " "meuscript" exit 1 esac exit 0
Esse comando coloca o arquivo no diretório "/etc/rc.d/init.d/" com as permissões necessárias.
[ root@localhost /]# install -o root -g root -m 755 meuscript /etc/rc.d/init.d/
Agora vamos incluí-lo no SYSV em uma tacada só, utilizando o utilitário chkconfig que está presente em praticamente todas as distribuições que suportam SYSV.
[ root@localhost /]# chkconfig --add meuscript
Ufa, o script está pronto para ser utilizado no SYSV, se você possuir o utilitário "ntsysv" que também está disponível em praticamente todas as distribuições execute-o e verá o seu script listado e marcado para start.
Agora você pode rodar o seu script no BOOT/HALT ou então no próprio console:
/etc/rc.d/init.d/meuscript
Modo de usar:
[ root@localhost /]# meuscript {start|stop|restart}Você também pode utilizar o chkconfig para gerenciar os seus scripts:
[ root@localhost /]# /etc/rc.d/init.d/meuscript start
Starting meuscript services: Isso é um teste...
[ root@localhost /]# /etc/rc.d/init.d/meuscript stop
Stoping meuscript services: Isso não é um teste...
[ root@localhost /]# /etc/rc.d/init.d/meuscript restart
Stoping meuscript services: Isso não é um teste...
Starting meuscript services: Isso é um teste...
chkconfig meuscript off --> desabilita o start no BOOT
chkconfig meuscript on --> habilita o start no BOOT
chkconfig --del meuscript --> remove o meu script do SYSV
[ root@localhost /]# man chkconfig para maiores informações.
É interessante você rodar cada um desses comandos e depois se dirigir aos níveis de diretórios que você escolheu (235) e verificar quais são as mudanças feitas para um melhor entendimento.
Ex:
[ root@localhost /]# chkconfig --add meuscriptAgora rode "chkconfig meuscript off" e verifique novamente os diretórios, aí sim você vai entender porque é interessante utilizar scripts compatíveis com SYSV.
ls -l /etc/rc.d/rc0.d/
...
K40meuscript ->
../init.d/meuscript
Parece familiar ?
...ls -l /etc/rc.d/rc1.d/
...
K40meuscript -> ../init.d/meuscript
Parece familiar ?
...
ls -l /etc/rc.d/rc2.d/
...
S65meuscript -> ../init.d/meuscript
...
ls -l /etc/rc.d/rc3.d/
...
S65meuscript -> ../init.d/meuscript
...
ls -l /etc/rc.d/rc4.d/
...
S65meuscript -> ../init.d/meuscript
...
ls -l /etc/rc.d/rc5.d/
...
S65meuscript -> ../init.d/meuscript
...
ls -l /etc/rc.d/rc6.d/
...
S65meuscript -> ../init.d/meuscript
...
Espero que esse artigo seja de utilidade para todos.
Rodrigo P. Telles - telles@hypermall.com.br
Uma pequena observação para o Ubuntu sobre o arquivo /etc/rcS.d :
Os scripts nesse diretório começam com a letra S e são executados quando o sistema inicia, mesmo em single user. (rc1) Os scripts são simbólicos e apontam para /etc/init.d/ .
Para disabilitar ums script neste diretório renomeie-o para que comece com a letra K
A partir do S40 , todos os sistemas de arquivo estão montados e a rede está disponível, todos os drivers já foram inicializados.
Depois do S60 , o relógio já foi setado , o NFS já foi montado e o sistema de arquivos já está limpo.
0 Comentários:
Postar um comentário
Assinar Postar comentários [Atom]
<< Página inicial