Base para controlador de daemons shell-script

Alan Victor Quarta, 17 de Dezembro de 2014


Criei um esqueleto para criação de shell-script tipo um controlador de daemons, com start, stop, restart e status. Nas linhas 96 a 97 é onde entra o código do serviço que você deseja criar. É pouco provável precisar modificar o corpo do script, para criação de novos scripts/serviços.

#!/bin/bash
################################################################################
# Base para criacao de scripts tipo daemons com argumentos
# start, stop, restart, status.
# Alan Victor M. Leite
# 05/12/2014
################################################################################

# variaveis predefinidas
################################################################################
named=$(basename $0)
logfile=/var/log/$named
null=/dev/null
pidfile=/var/run/$(basename $0).pid
################################################################################

# codigo de cores
################################################################################
codigo="\033["
vermelhoClaro="1;31m";
verdeClaro="1;32m";
finall="\033[0m"

# testes
################################################################################
[ ! -f $logfile ] && { touch $logfile ; }
################################################################################

# functions
################################################################################
eco_verde_claro() {
	echo -ne "${codigo}${verdeClaro}$*${finall}";
}

eco_vermelho_claro() {
	echo -ne "${codigo}${vermelhoClaro}$*${finall}";
}

_help() {
	eco_verde_claro "\n ajuda!\n\n";
}

_is_running() {
	test -f $pidfile && { return 0 ; } || { return 1 ; }
}

_stop() {
	_is_running && {
		kill -9 $(cat $pidfile) &> $null;
		sleep 0.5
		rm -rf $pidfile &> $null && {
			eco_verde_claro "\n Programa parado!\n\n";
			return 0;
		} || {
			eco_vermelho_claro "\n PIDfile nao encontrado!\n\n"
			return 1;
		}
	} || {
		eco_vermelho_claro "\n Programa nao estava rodando!\n\n";
		return 1;
	}
}

_start() {
	_is_running && {
		eco_vermelho_claro "\n Programa estava rodando!\n\n";
		return 1;
	} || {
		_daemon;
		sleep 0.5
		eco_verde_claro "\n Programa iniciado!\n\n";
		return 0;
	}
}

_restart() {
	_stop ; _start;
}

_status() {
	_is_running && {
		eco_verde_claro "\n Programa esta rodando!\n";
		eco_verde_claro " PID: $(cat $pidfile)\n\n";
	} || {
		eco_vermelho_claro "\n Programa nao esta rodando!\n\n";
	}
}
################################################################################

# daemon
################################################################################
_daemon() {
	while : ; do
		# Aqui entra o codigo do programa/daemon
		# Aqui entra o codigo do programa/daemon
		echo rodando > $logfile
		sleep 1
		# Aqui entra o codigo do programa/daemon
		# Aqui entra o codigo do programa/daemon
	done &
	echo $! > $pidfile
}

################################################################################

# case
################################################################################
case $1 in
	start)		_start ;;
	stop)		_stop ;;
	restart)	_restart ;;
	status)		_status ;;
	*)		_help ;;
esac
################################################################################