Cron para enviar e-mail se o arquivo não existir

1

Eu tenho um trabalho cron que executa um script de shell como segue

00 01 * * * sh /backup/script.sh

Agora, preciso adicionar uma funcionalidade em cron para que, se esse script não existir, gere um alerta para mim por e-mail usando sendmail utility.

Algo como

00 01 * * * find script and execute script or if find no result then email.
    
por Tarun 10.09.2013 / 16:10

3 respostas

3

Eu vejo duas soluções gerais. Uma delas é fazer com que o cron o notifique sobre os resultados dos comandos que executa. Especificamente, a página man crontab (5) declara que

% bl0ck_qu0te%

Basta colocar uma linha como a seguinte na cabeça do seu arquivo crontab:

[email protected]

Como alternativa, se você quiser uma solução mais especializada, você pode criar um script e colocá-lo no local em que ele é garantido (como /bin ). O próprio script verificaria se o script real está presente, se sim, execute-o, se não, envie uma notificação. Algo ao longo das seguintes linhas:

#!/bin/bash

myscript=/path/to/your/script
[email protected]

if [ -f "$myscript" ] ; then
    exec "$myscript"
else
    mail -s "Error running $myscript" $myemail <<EOF
There was an error running the script
$myscript
The script could not be found
EOF
fi

Você pode até torná-lo genérico:

#!/bin/bash

myscript=$1
shift 1
params=$*
[email protected]

if [ -f "$myscript" ] ; then
    exec "$myscript $*"
else
    mail -s "Error running $myscript" $myemail <<EOF
There was an error running the script
$myscript
The script could not be found
EOF
fi
    
por January 10.09.2013 / 16:35
2

o cron faz isso por você já. Sua entrada no crontab diz:

00 01 * * * sh /backup/script.sh

No horário agendado, o cron executará o comando especificado e enviará por e-mail sua saída.

A saída de sh /does/not/exist é: sh: 0: Can't open /does/not/exist . Então é isso que o cron irá enviar por e-mail se o arquivo não existir.

Você pode precisar certificar-se de que seu sistema está configurado corretamente para e-mail, para que o cron possa enviar e-mails com sucesso. Você mencionou o sendmail; se o sendmail estiver configurado corretamente, e o email do seu usuário funcionar, então o cron funcionará também.

A variável MAILTO também pode ajudar se você precisar enviar um endereço diferente por e-mail ou se enviar um e-mail ao seu usuário não funcionar, mas enviar um endereço de e-mail específico da Internet por e-mail. Basta adicionar a linha [email protected] acima da linha existente.

    
por Robie Basak 10.09.2013 / 16:44
1

Bem, você precisará de outro script. Algo parecido com isto:

#!/bin/bash

file="/path/to/script.sh"

# if script.sh exists and is executable.
if [ -x $file ]; then
    # execute script.sh
    sh /path/to/script.sh
else 
    #send mail
    echo "script.sh doesn't exists or is not executable" | sendmail [email protected]
fi
    
por Radu Rădeanu 10.09.2013 / 16:38