2014-12-09 105 views
1

我有一个bash脚本,它从一个数据库导出表并将其导入到另一个数据库中。奇迹般有效。如何在bash中捕获mysql错误

但是因为我想让它作为cronjob运行,所以我希望它发送一封电子邮件,以防万一我出现任何错误。但我怎么知道我是否有这样的错误例如:

ERROR 1045 (28000): Access denied for user 'importuser'@'192.168.xxx.xxx' (using password: YES) 

任何想法如何做到这一点?这里是关键的一段话:

mysql --user=$rep_user --password=$rep_password --host=$rep_host --database=$rep_name < /tmp/${i}.sql 

我已经尝试过

result=`mysql --user=$rep_user --password=$rep_password --host=$rep_host --database=$rep_name < /tmp/${i}.sql` 
    echo $result >> $EMAILMESSAGE 

不过,这并不在我的$ EMAILMESSAGE

有没有人出现一个想法如何实现这一目标?

回答

3

我假设你的$EMAILMESSAGE变量已经初始化并且保存了一个文件的位置。如果是这样,你应该能够得到的结果吧,如下所示(且仅当命令失败):

result=$(mysql --user=$rep_user --password=$rep_password --host=$rep_host --database=$rep_name < /tmp/${i}.sql 2>&1) 
[ $? = 0 ] || echo $result >> $EMAILMESSAGE 
+0

正确$ EMAILMESSAGE是文件的位置。 – 2014-12-09 12:52:40

1

mysql的工作方式与任何其他unix命令行工具一样,可以使用命令的退出状态。

因此,您可以在if中使用它,使用短路||&&或直接检查$?