Daemons com shell script
Neste artigo mostrarei como criar daemons em shell script no Linux.
Parte 2: Incrementando o daemon
Agora vamos incrementar nosso daemon para ter mais controle sobre ele.
Nosso daemon agora tem um objetivo! Execute-o e veja:
# ./daemon.sh
O objetivo deste daemon é verificar se existe o arquivo on na pasta /tmp. Quando encontrar o arquivo, o script irá gerar um retorno de log em /tmp/daemon.log.
Explanação:
#!/bin/bash
LOCK=/tmp/daemon.lock
LOG=/tmp/daemon.log
YES=/tmp/on
control_c () {
echo -e "\nacabou o daemon"
rm $YES 2>/dev/null
rm $LOCK 2>/dev/null
exit 0
}
trap control_c INT HUP TERM
echo "#########################################" >> $LOG
echo "começa o daemon.sh `date`" >> $LOG
if [ ! -f $LOCK ]
then
touch $LOCK
while true
do
sleep 1
if [ -f $YES ]
then
echo "o arquivo $YES foi encontrado: `date`" >> $LOG
rm $YES 2>/dev/null
rm $LOCK 2>/dev/null
echo "termina o daemon.sh `date`" >> $LOG
break
fi
done
else
echo "o daemon já está em execução"
exit 0
fi
Nosso daemon agora tem um objetivo! Execute-o e veja:
# ./daemon.sh
O objetivo deste daemon é verificar se existe o arquivo on na pasta /tmp. Quando encontrar o arquivo, o script irá gerar um retorno de log em /tmp/daemon.log.
Explanação:
- LOCK = Variável com um arquivo de controle para não deixar outro daemon ser executado. A intenção é ter apenas uma instância do daemon.
- LOG = Arquivo que registra as ocorrências na execução.
- YES = Arquivo que o daemon espera para terminar sua execução.
- control_c () = Uma função criada para ser executada em algum sinal recebida pelo comando trap.
- trap = Comando que interpreta sinais do kernel do tipo INT (interrupção através do ctrl+c), HUP (sinal enviado pelo kill, mas sem a opção -9) e TERM (finalizar o processo com kill).
- if/else = Condição para verificar se existe o arquivo /tmp/daemon.lock, caso exista retora mensagem.
- while = Loop infinito para a condição if.
- break = Parar o loop infinito e terminar o daemon.
Um abraço.