我在shell脚本中有以下命令mysql dump
,然后我将ssh上的SQL文件加载到远程数据库中,然后更新时间戳。
1. mysqldump -u root files path | gzip -9 > $SQL_FILE
2. cat $SQL_FILE | ssh -i ~/metadata.pem ubuntu@1.2.3.4
"zcat | mysql -u 'root' -h 1.2.3.4 metadata"
3. TIMESTAMP=`date "+%Y-%m-%d-%T"`
4. mysql -u 'root' -h 1.2.3.4 metadata -e "UPDATE path_last_updated SET timestamp=DEFAULT"
有没有办法改进上述命令。例如,如果第2行出现故障(例如,由于连接问题)会发生什么,但第4行成功了?
我如何让第4行以第2行的成功为条件运行?
答案 0 :(得分:2)
你可以在一个区块内链接:
mysqldump -u root files path |
gzip -9 |
ssh -i ~/metadata.pem ubuntu@1.2.3.4 "zcat |\
mysql -u 'root' -h 1.2.3.4 metadata" &&
mysql -u 'root' -h 1.2.3.4 metadata -e "
UPDATE path_last_updated SET timestamp=DEFAULT"
因此,如果之前出现故障,则不会执行最后一条mysql命令。
答案 1 :(得分:1)
您可以使用$?
获取最后一个命令的返回码,如果它不是0,则失败。
或者您可以使用&&
例如:cmd1 && cmd2
。
或者,如果发生错误,您可以使用set -e
来停止脚本。