我必须将一些 gzip 压缩文件从本地服务器发送到 SFTP 服务器。
我的服务器信息
发行商 ID:Ubuntu
说明:Ubuntu 12.04.4 LTS
发布:12.04
代号:精确
创建了一个 bash 脚本,并且能够将文件发送到 sftp,但我想在传输成功时发送电子邮件。
#!/bin/bash
HOST=hostname.domain
PORT=22
USER=username
PASSWORD=password
SOURCE_FILE=path/filename
TARGET_DIR=PATH
/usr/bin/expect<<EOD
spawn /usr/bin/sftp -o Port=$PORT $USER@$HOST
expect "password:"
send "$PASSWORD\r"
expect "sftp>"
send "put $SOURCE_FILE $TARGET_DIR\r"
expect "sftp>"
send "bye\r"
EOD
现在我想如果上述传输成功,则发送成功电子邮件,如果失败则发送包含错误消息的失败电子邮件。
请帮忙!!
Thanks.
您可以将错误信息从脚本传输到文件,并使用第二个脚本来 grep 查找错误。第二个脚本甚至可以运行第一个脚本,并且可能如下所示:
/path/firstscript.sh 2>&1 > results.txt
if [ -n "$(grep 'error expected' results.txt)" ]
then
echo "Found error" | mail -S "Error" [email protected] /cdn-cgi/l/email-protection
else
echo "No error" | mail -s "Okay" [email protected] /cdn-cgi/l/email-protection
fi
就我个人而言,我发现最好通过进行第二次连接并在那里列出输出来检查目标站点上的文件。然后我检查第二个连接日志是否存在上传的文件。
我无法与我为其编写文件传输脚本的三个不同公司使用 rsync 或密钥身份验证,因此我对那些在提出问题时得到“不要这样做”答案的人表示同情。当您寻找答案时情况会更糟,因为您已经知道人们推荐的内容不会起作用。
以下是更接近我实际所做的示例:
电子邮件结果.bash
#!/bin/bash
./uploadfile_example.bash 2>&1 > log.txt
if [ -n "$(grep "$(date +%b' '%d)" log.txt|grep "testfile")" ]
then
echo "File uploaded" |mail -s "Test success" [email protected] /cdn-cgi/l/email-protection
else
echo "File not uploaded" |mail -s "Test fail" [email protected] /cdn-cgi/l/email-protection
fi
上传文件_example.bash
#!/bin/bash
datestamp=$(date +%s)
/bin/cp -v testfile.txt testfile.${datestamp}.txt
HOST="localhost"
USER="testuser"
PASS="YourPasswordHere"
expect -c "
spawn sftp ${USER}@${HOST}
expect \"password: \"
send \"${PASS}\r\"
expect \"sftp>\"
send \"put testfile.${datestamp}.txt\r\"
expect \"sftp>\"
send \"ls -l testfile.${datestamp}.txt\r\"
expect \"sftp>\"
send \"bye\r\"
expect \"#\"
"
/bin/rm -vf testfile.${datestamp}.txt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)