我有一些脚本可以执行一些常见操作,例如备份 MySql 数据库、gz、tar 一些文件并将它们放在 FTP 上或与其他备份/镜像系统同步。有些脚本运行得相当频繁(例如每小时两次/三次)。我在完成作业后发送电子邮件,其中附有命令的日志输出。要跟踪的电子邮件相当多。
我希望仅当脚本执行某些操作失败时(即脚本中的某些命令失败时)才发送电子邮件。我该如何实现这一点?
答案1
检查命令的返回值并继续执行。通常所有Linux 命令成功时返回 0,失败时返回其他数字(指定原因)。
更新:
忘记提到最后一条命令的状态保存在变量“ $?
”中。谢谢@bbaja42
答案2
这是我为工作写的脚本示例,每天都在使用
[alexus@wcmisdlin02 ~]$ sudo cat /usr/local/uftwf/mysql/_mysql.sh
#!/bin/sh
# $Id: _mysql.sh,v 1.2 2011/05/31 16:02:56 alexus Exp $
if [ -d /var/lib/mysql/ ]; then
cd /var/lib/mysql/
for i in `ls`; do
/usr/bin/mysqldump \
--user=root \
$i > /usr/local/uftwf/mysql/$i.sql
/bin/gzip \
--force \
--quiet \
/usr/local/uftwf/mysql/$i.sql
done
/usr/bin/mysqladmin \
--user=root \
flush-logs
/usr/bin/mysql \
--user=root \
--execute='PURGE BINARY LOGS BEFORE subdate(curdate(), INTERVAL 1 DAY);'
fi
[alexus@wcmisdlin02 ~]$
[alexus@wcmisdlin02 ~]$ sudo crontab -l -u mysql
@daily /usr/local/uftwf/mysql/_mysql.sh
[alexus@wcmisdlin02 ~]$
只有当你遇到某种错误时它才会给你发送电子邮件,不是如果作业运行正常,则发送邮件。此 shell 脚本位于 /usr/local/uftwf/mysql 中,备份也位于此处。修改此脚本以将文件 FTP/rsync 传输到您的远程位置。