BackupPCからログの最後の行を抽出したいと思います。これにより、バックアップが失敗した場合に電子メールで理由がわかります。私はこのコマンドを使用してログのsed
最後の行を取得しました。しかし、画面に反映するのに問題があります。 FAILED 行は表示されますが、ログにはエラー行は表示されません。この問題をどのように解決できますか?そして/またはより良い方法はありますか?
#!/bin/bash
# script to send simple email
# Email To ?
EMAIL="[email protected]"
# 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
私のメールの結果です。ログファイルに行がありません。
ukat2 backup has FAILED
---------------------------------
ベストアンサー1
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"