Bash &引用;“论错误”;发送电子邮件并退出

Bash &引用;“论错误”;发送电子邮件并退出,bash,email,raspberry-pi,Bash,Email,Raspberry Pi,我有一个脚本,它在某个时间使用Raspberry Pi将文件从一个HD备份到另一个HD 我需要开始做rsyncs,如果在任何时候有错误,发送电子邮件中的行号,然后关闭pi 但是,我不知道如何以及在我现有的脚本中添加这样的函数。电子邮件已设置为向我的域发送邮件 #!/bin/bash begin=$(date --date="19:00" +%s) end=$(date --date="21:00" +%s) now=$(date +%s) if [ "$begin" -le "$no

我有一个脚本,它在某个时间使用Raspberry Pi将文件从一个HD备份到另一个HD

我需要开始做rsyncs,如果在任何时候有错误,发送电子邮件中的行号,然后关闭pi

但是,我不知道如何以及在我现有的脚本中添加这样的函数。电子邮件已设置为向我的域发送邮件

    #!/bin/bash

begin=$(date --date="19:00" +%s)
end=$(date --date="21:00" +%s)
now=$(date +%s)

if [ "$begin" -le "$now" -a "$now" -le "$end" ]; then


    echo "/sbin/shutdown -h 15" | sudo at 20:40

else

begin=$(date --date="3:00" +%s)
end=$(date --date="6:00" +%s)
now=$(date +%s)

    if [ "$begin" -le "$now" -a "$now" -le "$end" ]; then

/usr/bin/rsync -avx --delete /media/HDD1/shares/myprofile /media/HDD2/shares/
/usr/bin/rsync -avx --delete /media/HDD1/shares/hanprofile /media/HDD2/shares/

else

echo "don't do rsyncs"

    fi

fi

在脚本顶部添加:

f () {
errcode=$? # save the exit code as the first thing done in the trap function

v1="Error "
v2=$errcode
v3=" the command executing at the time of the error was " 
v4=$BASH_COMMAND
v5=" on line "
v6=${BASH_LINENO[0]}
v7="$v1 $v2 $v3 $v4 $v5 $v6"

echo "$v7" | mail -s "Error" makem@myhome.co.uk
exit $errcode  # or use some other value or do return instead
}
trap f ERR

您可以使用邮件客户端发送电子邮件。如果不知道Rasberry Pi上安装了哪些,也不知道它使用的是什么操作系统,任何比非常模糊的建议都不可能。如果您放弃报告行号的要求,只需从Cron运行脚本就可以几乎完全满足您的要求。