Executando scripts na inicialização do Debian/Ubuntu


Muitas vezes desejamos executar algum comando ou iniciar serviços na inicialização do Sistema Operacional. É muito simples executar essa operação usando o Debian ou o Ubuntu.

Veja abaixo um passo-a-passo e um exemplo usando uma instalação manual do Servidor WEB Apache.

Todos os comandos precisam ser executados como root.

Primeiramente, vamos criar um script chamado meuScript em /etc/init.d com uma estrutura semelhante à abaixo:

#!/bin/bash
#
# /etc/init.d/meuScript
 
case "$1" in
    start)
        echo "Iniciando serviço..."
        # comando para iniciar o serviço
        ;;
 
    stop)
        echo "Parando serviço..."
        # comando para parar o serviço
        ;;
 
    restart)
        echo "Reiniciando serviço..."
        # comando para reiniciar o serviço
        ;;
 
    *)
        echo "Operação inválida"
        ;;
esac

Dê permissão de execução para o script:

# chmod +x meuScript

A partir desse momento você já pode executar os comandos abaixo:

# /etc/init.d/meuScript start
# /etc/init.d/meuScript stop
# /etc/init.d/meuScript restart

Para inserir o script na inicialização do sistema, usamos o comando update-rc.d da seguinte maneira:

# update-rc.d meuScript defaults

O “meuScript” é o nome do script em /etc/init.d, não o caminho completo a ele, ou seja, não importa em qual diretório você está, apenas coloque o nome do script.

O “defaults” indica que desejamos inserir o script nos runlevels padrões do sistema.

Ao executar esse comando, um warning será mostrado, apesar de o comando ter funcionado. Aparecerá uma mensagem como esta:

update-rc.d: warning: /etc/init.d/meuScript missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>

Você pode ignorá-lo ou inserir as informações de LSB, o que é mostrado no link exibido no warning. É algo bem simples. =)

Para remover um script da inicialização:

# update-rc.d -f meuScript remove

Como prometi, vou mostrar um exemplo que uso para uma instalação manual do Apache:

#!/bin/bash
#
# /etc/init.d/apache2 
 
### BEGIN INIT INFO
# Provides:          apache2
# Required-Start:    $local_fs $syslog
# Required-Stop:     $local_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Apache at boot
# Description:       Start Apache HTTP Server
### END INIT INFO
 
# Path to Apache controller
BIN=/usr/local/apache2/bin/apachectl
 
function startApache()
{
	echo "Starting Apache..."
	$BIN start
}
 
function stopApache()
{
	echo "Stopping Apache..."
	$BIN stop
}
 
case "$1" in
	start )
		startApache
		if [ $? -eq 0 ]
		then
			echo "OK."
		fi
 
		;;
 
 
	stop )
		stopApache
		if [ $? -eq 0 ]
		then
			echo "OK."
		fi
 
		;;
 
	restart )
		stopApache
		sleep 1
		startApache
		if [ $? -eq 0 ]
		then
			echo "OK."
		fi
 
		;;
 
 
	* )
		echo "Invalid option"
		;;
esac

The following two tabs change content below.
Graduado em Ciência da Computação, pela Universidade Federal do Paraná (UFPR), é desenvolvedor de software desde 2008, com foco em Desenvolvimento Web com PHP.