我在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行的成功为条件运行?
发布于 2013-02-04 06:36:19
您可以在一个块中链接所有内容:
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命令将不会被执行。
发布于 2013-02-04 06:24:40
上一条命令的get返回码可以用$?,不为0表示失败。
或者,您可以使用&&,例如:cmd1 && cmd2。
或者,如果出现错误,可以使用set -e停止脚本。
https://stackoverflow.com/questions/14677966
复制相似问题