nice
いくつかのデータベースをダンプし、バックアップ用の資産を圧縮する3つのコマンドがあります。その後、ファイルを別のサーバーにコピーする必要があります。私は次のコマンドを使用しています:
nice mysqldump -u user1 -p'XXX' database1 | gzip > database1.sql.gz
nice mysqldump -u user2 -p'XXX' database2 | gzip > database2.sql.gz
nice zip -r assets.zip /var/www/site1/assets/
cd ..
scp -R backups [email protected]:/home/user/backups
私の問題は、scp
良いコマンドが完了する前にコマンドが実行されているようです。これにより部分的なSQLダンプが発生し、時にはzipファイルが破損することがあります。
それでは、ファイルを別のサーバーにコピーする前に、3つのコマンドがすべて完了したことをどうやって確認できますか?
答え1
wait
組み込みシェルを使いたいです。
バックグラウンドでコマンドを実行し、続行する前にすべてのコマンドが完了するのを待つようにシェルに指示します。以下は非常に基本的な例です。
#!/bin/bash
sleep 6 && echo first sleep &
WAITPID="$!"
sleep 3 && echo second sleep &
WAITPID="$WAITPID $!"
echo "waiting"
wait $WAITPID
echo "done waiting"
メモ:
- バックグラウンドプロセス
pid
はに収集され、WAITPID
リストはに供給されますwait
。ジョブ番号も使用できます。 - このコマンドを実行すると、
second sleep
最初に完了したことがわかります。