O script é executado corretamente no terminal, mas não sob o Cron [duplicado]

0

Estou executando este script no terminal e obtendo os resultados desejados, mas quando eu defino um cron para executá-lo de /root/somefolder/ a cada 5 min, ele não faz o que deve fazer.

A entrada do meu usuário root crontab tem esta aparência:

*/5 * * * * ~root/somedirectory/script.sh

O script é:

#!/bin/bash

## Variables ##
host="'/bin/hostname'";

        ## Limits ##
OneMin="1";
FiveMin="6";
FifteenMin="6";

     ## Mail IDs ##
To="someone@somedomain"; Fr="root@"$host;

     ## Load Averages ##

LA=('uptime | grep -Eo '[0-9]+\.[0-9]+' | cut -d"." -f1')

      ## Top Process List ##

tp=('ps -ef | sort -nrk 3,3 | grep -E "(php|httpd)" | grep -v root | head -n30 | awk '{print $2}'')

## Actions ##

if [ ${LA[0]} -ge $OneMin ]; then

      ## Send Mail ##
echo -e "From: $Fr
To: $To
Subject: *ALERT* - Current Load on '$host' Is High Load Averages Are: \n\n 1:Min\t5:Min\t15:Min \n
${LA[0]}\t${LA[1]}\t${LA[2]} \n\n List Of Processes That Were Killed \n" | sendmail -t

## Kill Top Pocesses ##
for i in $tp ; do kill -9 $i
     done

fi

Problemas:

  1. Todos os destinatários na variável $ To não recebem nenhum alerta, quando o script é executado via cron, mesmo que a instrução if seja verdadeira, mas quando é executada no terminal, todos recebem um email.

  2. Eu tentei colar todos os IDs de email diretamente em Para: campos como este, porque achei que não estava lendo a variável $ To. Para: alguém @ somedomain em vez de $ To

Mas ainda assim nenhum dos destinatários recebe nenhum alerta e nenhuma ação parece ser executada.

    
por Sollosa 13.03.2018 / 08:48

2 respostas

1

Experimente a seguinte sintaxe para sendmail em seu script:

#!/bin/bash

# some code

/usr/sbin/sendmail -t <<EOF
To: [email protected] "$address1" "$address2"
Cc: [email protected] [email protected] [email protected]
Subject: [Monitoring] $foo $bar at $host
From: [email protected]

Monitoring for example.com server loss of connectivity - hourly update:
---------------------------------------------------------------------------

$some
$more
$variables

EOF

Você pode incorporar variáveis no bloco "heredoc".

O nome do script foi monitor.sh . Entrada eu usei no crontab, como root:

@hourly /root/monitor.sh

Problemas relacionados à entrega de e-mail sendmail ou (com falha) podem ser verificados em /var/log/maillog .

    
por 13.03.2018 / 10:42
1

Parece que os comandos do shell precisam ser escritos com um caminho absoluto, portanto, sendmail deve ser /usr/bin/sendmail . Eu atualizei e o cron começou a funcionar.

    
por 13.03.2018 / 13:46