2

を実行するシェル スクリプトに次のコマンドをmysql dump記述し、その SQL ファイルを ssh 経由でリモート データベースにロードしてから、タイムスタンプを更新します。

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 が成功した場合はどうなるでしょうか?

2 行目の成功を条件として 4 行目を実行するにはどうすればよいですか?

4

2 に答える 2

2

すべてを 1 つのブロックにチェーンできます。

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-03T22:36:19.413 に答える
1

$?最後のコマンドの戻りコードを取得するために使用できます。それが 0 でない場合は、失敗しました。

&&または、たとえば次のように使用できますcmd1 && cmd2

またはset -e、エラーが発生した場合にスクリプトを停止するために使用できます。

于 2013-02-03T22:24:39.767 に答える