Erro Script Telegram

224 views
Skip to first unread message

Hernane Ribeiro

unread,
Dec 20, 2016, 7:08:19 AM12/20/16
to Bacula Backup-Pt-Br
Bom dia a todos.

Segui passo-a-passo do link http://www.bacula.com.br/enviar-notificacoes-do-bacula-via-telegram/, conforme descrito, mas o script está me retornando erro:

Erro do Script:
20-Dec 09:42 bacula-dir JobId 14: shell command: run AfterJob "/etc/bacula/scripts/_send_telegram.sh 14"
20-Dec 09:42 bacula-dir JobId 14: AfterJob: mysql: [Warning] Using a password on the command line interface can be insecure.
20-Dec 09:42 bacula-dir JobId 14: AfterJob: /etc/bacula/scripts/_send_telegram.sh: linha 8: bc: comando não encontrado
20-Dec 09:42 bacula-dir JobId 14: AfterJob: /etc/bacula/scripts/_send_telegram.sh: linha 9: bc: comando não encontrado

Verifiquei o script mas infelizmente não encontrei o problema.

#!/bin/bash
# /etc/bacula/scripts/_send_telegram.sh
# Função para converter bytes para humanos
b2h(){
    # Spotted Script @: http://www.linuxjournal.com/article/9293?page=0,1
    SLIST=" bytes, KB, MB, GB, TB, PB, EB, ZB, YB"
    POWER=1
    VAL=$( echo "scale=2; $1 / 1" | bc)
    VINT=$( echo $VAL / 1024 | bc )
    while [ ! $VINT = "0" ]
    do
        let POWER=POWER+1
        VAL=$( echo "scale=2; $VAL / 1024" | bc)
        VINT=$( echo $VAL / 1024 | bc )
    done
    echo $VAL$( echo $SLIST  | cut -f$POWER -d, )
}
# fim da funcao

# Declaração de variáveis
HOUR=$(date +%d/%m/%Y\ %H:%M:%S)
NUM_DEST="user#73459028"  # ou "chat#123456789" para um grupo
COMMAND="msg $NUM_DEST"
TGEXEC="/usr/local/bin/telegram-cli"
CONF="/usr/local/telegram-cli/telegram.conf"
RSAKEY="/usr/local/telegram-cli/keys/tg-server.pub"
LOGTG="/usr/local/telegram-cli/log/telegram.log"
LOG="/etc/bacula/log/telegram.log"
DBHOST="localhost"
DBPORT="3306"
DBUSER="bacula"
DBPASSWORD="bacula"
DBNAME="bacula"
#convert_humanreadable(Job.JobBytes) as JobBytes, Job.JobFiles,
# Query para buscar as informações do JobId
sql_query="select Job.Name, Job.JobId,(select Client.Name from Client where Client.ClientId = Job.ClientId) as Client, Job.JobBytes, Job.JobFiles,
case when Job.Level = 'F' then 'Full' when Job.Level = 'I' then 'Incremental' when Job.Level = 'D' then 'Differential' end as Level,
(select Pool.Name from Pool where Pool.PoolId = Job.PoolId) as Pool,
(select Storage.Name  from JobMedia left join Media on (Media.MediaId = JobMedia.MediaId) left join Storage on (Media.StorageId = Storage.StorageId)
where JobMedia.JobId = Job.JobId limit 1 ) as Storage, date_format( Job.StartTime , '%d/%m/%Y %H:%i:%s' ) as StartTime, date_format( Job.EndTime , '%d/%m/%Y %H:%i:%s' ) as EndTime,
sec_to_time(TIMESTAMPDIFF(SECOND,Job.StartTime,Job.EndTime)) as Duration, Job.JobStatus,
(select Status.JobStatusLong from Status where Job.JobStatus = Status.JobStatus) as JobStatusLong
from Job where Job.JobId=$1"

# Atribuição de Variáveis
str=`echo -e "$sql_query" | mysql -u $DBUSER -p$DBPASSWORD -D $DBNAME -h $DBHOST -P $DBPORT -B |  while read; do sed 's/\t/\|/g'; done`
JobName=`echo $str | cut -d"|" -f1`
JobId=`echo $str | cut -d"|" -f2`
Client=`echo $str | cut -d"|" -f3`
JobBytes=`b2h $(echo $str | cut -d"|" -f4)`
JobFiles=`echo $str | cut -d"|" -f5`
Level=`echo $str | cut -d"|" -f6`
Pool=`echo $str | cut -d"|" -f7`
Storage=`echo $str | cut -d"|" -f8`
StartTime=`echo $str | cut -d"|" -f9`
EndTime=`echo $str | cut -d"|" -f10`
Duration=`echo $str | cut -d"|" -f11`
JobStatus=`echo $str | cut -d"|" -f12`
Status=`echo $str | cut -d"|" -f13`

# Emojis
# OK
# http://emojipedia.org/white-heavy-check-mark/
# Not OK
# http://emojipedia.org/cross-mark/
# Floppy Disk
# http://emojipedia.org/floppy-disk/
# Header diferente caso tenha erro
if [ "$JobStatus" == "T" ] ; then
   HEADER=">>>>> ? BACULA BACKUP <img draggable="false" class="emoji" alt="✅" src="https://s.w.org/images/core/emoji/72x72/2705.png"> <<<<<\n"  # OK
else
   HEADER=">>>>> ? BACULA BACKUP <img draggable="false" class="emoji" alt="❌" src="https://s.w.org/images/core/emoji/72x72/274c.png"> <<<<<\n"  # Error
fi
# Formata a mensagem
MESSAGE="$HEADER\nJobName=$JobName\nJobid=$JobId\nClient=$Client\nJobBytes=$JobBytes\nJobFiles=$JobFiles\nLevel=$Level\nPool=$Pool\nStorage=$Storage\nStartTime=$StartTime\nEndTime=$EndTime\nDuration=$Duration\nJobStatus=$JobStatus\nStatus=$Status\nAttempt="
MESSAGELOG="Message: JobName=$JobName | Jobid=$JobId | Client=$Client | JobBytes=$JobBytes | Level=$Level | Status=$Status"
# PROCESS_NUM=$(ps -ef | grep "$1" | grep -v "grep" | wc -l)

# Loop múltiplas tentativas
COUNT=1
while [ $COUNT -le 20 ]; do

   echo "$(date +%d/%m/%Y\ %H:%M:%S) - Start message send (attempt $COUNT) ..." >> $LOG
   echo "$(date +%d/%m/%Y\ %H:%M:%S) - $MESSAGELOG" >> $LOG

   while [ $(ps -ef | grep telegram-cli | grep -v grep | wc -l) -eq 1 ]; do
      echo "$(date +%d/%m/%Y\ %H:%M:%S) - Telegram still running, waiting 2 seconds before a new try ..." >> $LOG
      sleep 2;
   done;

   $TGEXEC --config $CONF --rsa-key $RSAKEY --exec "$COMMAND "$MESSAGE${COUNT}"" &>> $LOG

   RET=$?

   if [ $RET -eq 0 ]; then
     echo "$(date +%d/%m/%Y\ %H:%M:%S) - Attempt $COUNT executed successfully!" >> $LOG
     exit 0
   else
     echo "$(date +%d/%m/%Y\ %H:%M:%S) - Attempt $COUNT failed!" >> $LOG
     echo "$(date +%d/%m/%Y\ %H:%M:%S) - Waiting 30 seconds before retry ..." >> $LOG
     sleep 30
     (( COUNT++ ))
   fi

done

Desde já agradeço a ajuda de todos.

Hernane

Wanderlei Huttel

unread,
Dec 20, 2016, 7:36:37 AM12/20/16
to bacula-ba...@googlegroups.com
Olá Hernane

Esse script está depreciado já. A maneira mais fácil é usar os bots do telegram.
https://github.com/wanderleihuttel/bacula-utils/tree/master/telegram

Atenciosamente 

Wanderlei Hüttel

--
Você recebeu essa mensagem porque está inscrito no grupo "Bacula Backup-Pt-Br" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para bacula-backup-pt-br+unsub...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para bacula-backup-pt-br@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/bacula-backup-pt-br.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/bacula-backup-pt-br/8e07e47e-5565-4bcd-912f-be1019145cba%40googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Raul Libório

unread,
Dec 20, 2016, 10:29:36 AM12/20/16
to Lista de Discussão Bacula
Respondendo ao erro, aparentemente o usuário que executa o script não tem o diretório onde encontra-se o comando bc em sua variável PATH.
Você pode resolver isso declarando o caminho dentro do script, como o crontab faz.

Abs

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para bacula-backup-pt-br+unsubscribe...@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "Bacula Backup-Pt-Br" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para bacula-backup-pt-br+unsub...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para bacula-backup-pt-br@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/bacula-backup-pt-br.

Wanderlei Huttel

unread,
Dec 20, 2016, 11:01:45 AM12/20/16
to bacula-ba...@googlegroups.com
Ou pode dar um "apt-get install bc"

Atenciosamente 

Wanderlei Hüttel

--
Você recebeu essa mensagem porque está inscrito no grupo "Bacula Backup-Pt-Br" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para bacula-backup-pt-br+unsub...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para bacula-backup-pt-br@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/bacula-backup-pt-br.
Message has been deleted

Hernane Ribeiro

unread,
Dec 20, 2016, 11:27:20 AM12/20/16
to Bacula Backup-Pt-Br
Obrigado Wanderlei e Raul

Alterei o script conforme instrução, mas agora estou tendo outro problema.
Quando executo o telegram-cli: telegram-cli --config /etc/telegram.conf --rsa-key /usr/local/telegram-cli/keys/
tg-server.pub
e tento enviar alguma mensagem de teste, tem esse erro:

msg user#12345678 "Teste Telegram"
FAIL: 38: can not parse arg #1

Acredito que seja por esse motivo não estou recebendo as mensagem do bacula, não sei o que pode estar errado, pois a sessão está ativa, mas não consigo enviar as mensagem.

Além desse também estou recebendo esse aviso após terminar o scrip _send_telegram_mysql.sh


20-Dec 09:42 bacula-dir JobId 14: AfterJob: mysql: [Warning] Using a password on the command line interface can be insecure.

Obrigado
Reply all
Reply to author
Forward
0 new messages