Я хотел бы извлечь последнюю строку журнала в BackupPC, поэтому, если произойдет сбой резервного копирования, я узнаю причину по электронной почте. Я использовал команду sed
, чтобы получить последнюю строку журнала. Однако у меня возникают трудности с отображением этого на экране. Он показывает строку FAILED, но не строку с ошибкой из журнала. Как я могу это исправить и / или есть лучший способ сделать это?
#!/bin/bash
# script to send simple email
# Email To ?
EMAIL="myemail@mydomain.com"
# Email text/message
EMAILMESSAGE="/var/lib/backuppc/emailmessage.txt"
#Extract the last line of the log for error reporting
LOG_FILE="/var/lib/backuppc/log/LOG"
#Grab the status variables
xferOK=$1
host=$2
type=$3
client=$4
hostIP=$5
share=$6
XferMethod=$7
sshPath=$8
cmdType=$9
# Check if backup succeeded or not.
if [[ $xferOK == 1 ]]; then
STATUS="has been SUCCESSFUL"
# Email text/message
echo "$client backup $STATUS" > $EMAILMESSAGE
echo "------------------------------------------------------" >>$EMAILMESSAGE
echo "Type: $type" >>$EMAILMESSAGE
echo "Client: $client" >>$EMAILMESSAGE
echo "Host: $host" >>$EMAILMESSAGE
echo "Host IP: $hostIP" >>$EMAILMESSAGE
echo "Share: $share" >>$EMAILMESSAGE
echo "XferMethod: $XferMethod" >>$EMAILMESSAGE
echo "sshPath: $sshPath" >>$EMAILMESSAGE
echo "cmdType: $cmdType" >>$EMAILMESSAGE
/usr/sbin/sendmail "$EMAIL" < $EMAILMESSAGE
else
STATUS="has FAILED"
#If it had failed, send out the error report
# Email text/message
echo "$client backup $STATUS" > $EMAILMESSAGE
echo "---------------------------------" >>$EMAILMESSAGE
echo "$LOG_FILE" | sed -n '$p' >>$EMAILMESSAGE
/usr/sbin/sendmail "$EMAIL" < $EMAILMESSAGE
Вывод из моих писем. Никакой строчки из файла LOG.
ukat2 backup has FAILED
---------------------------------
echo "$LOG_FILE" | sed -n '$p'
не извлекает последнюю строку файла $LOG_FILE
, она берет последнюю строку того, что отправляется на его стандартный ввод, то есть имя вашего файла журнала ( /var/lib/backuppc/log/LOG
), который должен появиться в вашем электронном письме.
Правильный синтаксис будет следующим:
sed -n '$p' "$LOG_FILE"
Или, лучше, так как отображение N последних строк — это работа tail
:
tail -n 1 "$LOG_FILE"