Olá, isso é simples, segue um Script em loop infinito, para que não pare de executar.
o comando manual de inicialização pelo terminal seria: nohup /caminho/script_root.sh &
nohup no inicio para que o script fique aberto mesmo após fechar o terminal ou a sessão.
& no final para que o script rode em segundo plano e libere o terminal para uso.
Quando estiver testanto, execute-o normalmente, sem o
nohup e o & para que possa interrompe-lo facilmente.
Use
nohup e & apenas quando for deixa-lo em definitivo.
Assim ele ficará ativo após fechar a sessão e além disso, o terminal estará liberado para uso.
Você apenas receberá uma mensagem: nohup: ignorando entrada e anexando saída a "nohup.out"
Pressione Enter e pronto, o programa ja esta rodando.
Depois disso, para interromper o script somente o comando
kill -9 Numero_do_PID (O comando
ps -ef | egrep '('script_root.sh'|'PID')' | grep -v grep informa o numero do PID)
Para iniciar automaticamente, o script pode ser chamado pelo rc.local ou jogado em um diretório de inicio automático ou criar um serviço.
Nesse link
http://ubuntuforum-br.org/index.php/topic,93697.0.html tem informações sobre o inicio automatico do script com o sistema.
Como esse programa está com o loop infinito, ao utilizar um arquivo para chamar o script, como o rc.local, deve ser informado o caminho com o
& no final e o programa deve estar acima da ultima linha do rc.local(
exit 0).
Exemplo de como ficaria o final do arquivo em rc.local:
/root/script_root.sh &
exit 0
Detalhes do script:
# Arquivo /etc/shadow - Armazena uma sequencia de dezenas de caracteres que equivale a informações da senha dos usuários.
# Sempre que a senha do usuário muda, os caracteres referente ao usuário no arquivo etc/shadow mudam.
# Se essas informações mudam após a troca da senha, fica fácil bolar um script.
script
#! /bin/bash
# Script para envio de e-mail quando a senha de root for alterada.
senha1=$(cat /etc/shadow | grep root | tr -d "$");
# armazena em $senha1 a sequencia de caracteres do arquivo /etc/shadow referente a senha de root.
while true; do
# inicia o loop infinito para que o programa esteja sempre em execução.
senha2=$(cat /etc/shadow | grep root | tr -d "$");
# armazena em $senha2 a sequencia de caracteres do arquivo /etc/shadow referente a senha de root.
if [ $senha1 != $senha2 ]; then
# Compara $senha1 com $senha2
# Na primeira volta do laço $senha1 e $senha2 são iguais e essa condição é falsa.
# Eles são iguais por que buscaram a mesma informação no mesmo lugar.
# Por isso o programa não entrará nessa condição e nenhum e-mail ser-a enviado.
# ENTRETANTO, na segunda e demais voltas do laço, o programa busca as informações
# novamente em /etc/shadow e armazena em $senha2 para comparar novamente $senha2 com $senha1.
# Apenas quando a senha for alterada, essa condição será verdadeira.
# Nesse caso será enviado um e-mail e em seguida, redefinido o valor de $senha1.
# Dessa forma, na próxima volta do laço, $senha1 e $senha2 voltarão a ser iguais e essa
# condição voltará a ser falsa.
# Se isto não for feito, será enviado inumeros e-mails até que o script seja interrompido manualmente.
usuarios=$(last | grep still | awk {'print $1,$7}' | sed -e "s/$/;/g")
#Armazena em usuários o nome dos usuários que estão logados e desde quando estão logados, separados por ";".
#Dessa forma saberemos ques estava logado quando a senha foi alterada.
sendEmail -f meu_email@teste.com -t destinatario@gmail.com -u "Alteracao de senha" -m "Senha de root alterada.
Usuarios logados:
$usuarios" -s meusmtp.teste.com -xu meuusername -xp minhasenha;
# envio de e-mail pelo sednEmail informando que a senha foi alterada e
# informando quem estava logado no sistema nesse momento.
senha1=$(cat /etc/shadow | grep root | tr -d "$");
# armazena em $senha1 a sequencia de caracteres do arquivo /etc/shadow referente a NOVA senha de root.
fi
sleep 1;
# pausa de 1 segundo e volta ao inicio do laço (While).
# A pausa deixa a zero o consumo do processador e memória efetuado pelo script.
done
Explicando o envio de e-mail:
É preciso baixar e instalar o sendEmail.
sudo apt-get install sendEmailsendEmail é um programa que envia e-mails pelo terminal ou script sem precisar de configuração.
Opções do sendEmail
Na ordem em que deve ser informados:
-f meu_email@teste.com
-t destinatario@gmail.com
-u "Titulo do email"
-m "mensagem do corpo do email"
-a "/home/aquivo_de_anexo.xml" #Opcional caso queira enviar anexos.
-s meusmtp.teste.com
-xu meu nome de email
-xp minha senha de email;
xu e xp é para servidores que necessitam de autenticação.
EX:
Enviando e-mail pelo gmail
sendEmail -f rainier.lima@gmail.com -t carlos@terra.com.br -u "Teste de envio de e-mmail" -m "Mensagem de teste, favor desconsiderar" -s smtp.gmail.com
-o tls=yes -xu rainier.lima -xp minha_senha
obs:
-o tls=yes não costuma ser necessário para emails corporativos.
(Se tiver uma conta no gmail, altere o email (-f), usuário(-xu), a senha (-xp) e também o destinatário (-t) e faça um teste colando essa linha no terminal)
Para mais de um destinatario, apenas separe-os por espaço: user1@email.com user2@email.com...
Aspas dupla é opçional para destinatários (-t) e para o e-mail de origem (-f) Ex: -f "seu_email@teste.com" -t "user1@email.com user2@email.com..."
Att,