Como executar o meu script após o SuSE terminar a inicialização?

7

Eu quero que o meu servidor me avise (via rosnado) que a (re) inicialização terminou. Eu tenho o arquivo php que envia o growl pronto, mas eu não sei em qual arquivo devo adicionar a linha.

Qual arquivo eu preciso adicionar meu código para que ele seja executado somente após a inicialização do SuSE?

    
por Radek 17.07.2012 / 03:07

4 respostas

5

Nova sintaxe para o Suse Linux Enterprise 11 SP2 (e o openSUSE?)

A melhor maneira seria criar um script de shell que chamaria seu script PHP. Este script de shell deve ter em seu cabeçalho o seguinte comentário:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          nothing
# Required-Start:    $all
# Default-Start:     3 5
# Default-Stop:      4
# Short-Description: single_line_description
# Description:       multiline_description
### END INIT INFO

Você pode encontrar um modelo típico (com muitos comentários explicativos) em /etc/init.d/skeleton . Este modelo inclui o código necessário para ligar o seu script PHP. Você verá um caso inicial em que você teria que chamar seu script PHP.
Eu descartei um número de parâmetro opcional no cabeçalho, pois não parece que você precisaria deles.

Importante
É importante usar o esqueleto pelo menos a instrução case (veja ações de scripts init ), e para implementar o caso inicial, pelo menos. No caso inicial, é para onde chamar seu script.

Você pode encontrar aqui um pequeno exemplo de script que será chamado no final de uma inicialização: veja minha essência . Eu coloquei um nível de execução inválido para o Default-Stop, mas de alguma forma o script ainda é chamado durante o desligamento. De qualquer forma, o código no caso "stop" é executado, não aquele no caso "start" durante o encerramento.

Depois de ter escrito o seu script, copie-o para /etc/init.d , vamos supor que o seu script de inicialização é chamado de notificação de inicialização, então você faria (como root):

chown root:root boot-notification
chmod 0750 boot-notification
mv boot-notification /etc/init.d/

Então você precisa "registrar" o script no sistema init. Você usará o comando insserv (novamente como root) ou poderá usar o YaST:

insserv boot-notification

Depois, você pode verificar se o script é um dos últimos a serem executados, examinando cada nível de inicialização. Se você escolheu apenas o nível de execução 3, poderá fazer isso:

ls -l /etc/init.d/rc3.d/S*

Isso retornará uma lista de links para scripts de inicialização. O link para o seu script deve estar no final (ou próximo dele) da lista.

Nota: Se você quiser brincar com a maneira mais dinâmica de escrever scripts de inicialização, aconselho ler essas duas páginas:

por 19.07.2012 / 15:39
8

(aberto) O SUSE usa /etc/init.d/after.local para essa finalidade. Basta adicionar os comandos que você precisa para ser executado nesse arquivo. Observe que isso funciona bem com o init SystemV, mas com o systemd isso precisaria que o AFAIK precise ser resolvido de forma diferente.

    
por 17.07.2012 / 10:32
4

Para o OpenSUSE 12.2 (Mantis), o script para "after local" deve ser /etc/init.d/after-local , e você pode precisar ativá-lo via systemctl, assim ...

Para ativar /etc/init.d/after-local,

systemctl enable after-local.service

Para verificar o status de /etc/init.d/after-local,

systemctl status after-local.service
    
por 19.03.2013 / 03:33
2

Para adicionar um novo script de inicialização é bastante simples no Suse.

A melhor maneira seria criar um script de shell que chamaria seu script PHP. Este script de shell deve ter em seu cabeçalho o seguinte comentário:

#!/bin/sh
#chkconfig: 35 99 00
#description: Notify of boot completion

Você pode encontrar um modelo típico (com muitos comentários explicativos) em /etc/init.d/skeleton.compat (aquele que suporta a sintaxe do chkconfig, você também tem 7etc/init.d/skeleton que suporta o padrão LSB mais recente, mas é um pouco mais complicado para explicar como configurá-lo, embora seja mais poderoso). Este modelo inclui o código necessário para ligar o seu script PHP. Você verá um caso inicial em que você teria que chamar seu script PHP.

O número importante que dei a você está no chkconfig line .

  • 35: significa que esse script será chamado no init 3 (modo de console, comum para o servidor) ou no init 5 (modo gráfico, mais comum no desktop)
  • 99: é a prioridade no init 3 ou 5. Isso significa que será chamado por último. Observe que alguns outros scripts de inicialização podem ser chamados com prioridade 99.
  • 00: é a prioridade para o encerramento / reinicialização. Você também pode receber uma notificação assim que o sistema estiver inoperante.

Depois de ter escrito o seu script, copie-o para /etc/init.d , vamos supor que o seu script de inicialização é chamado de notificação de inicialização, então você faria (como root):

# chown root:root boot-notification
# chmod 0750 boot-notification
# mv boot-notification /etc/init.d/

Então você precisa "registrar" o script no sistema init. Você usará o comando chkconfig (novamente como root):

# chkconfig --add boot-notification

Verifique se isso foi levado em consideração corretamente:

# chkconfig boot-notification
boot-notification on

Se você vê, é bom!
Em seguida, você pode verificar se o script é um dos últimos a serem executados, examinando cada nível de inicialização. Se você escolheu apenas o nível de execução 3, poderá fazer isso:

$ ls -l /etc/init.d/rc3.d/S*

Isso retornará uma lista de links para scripts de inicialização. O link para o seu script deve estar no final (ou próximo dele) da lista.

Nota: Se você quiser brincar com a maneira mais dinâmica de escrever scripts de inicialização, aconselho ler essas duas páginas:

por 17.07.2012 / 10:37