我有 3 个nice
命令用于转储一些数据库并压缩资产以进行备份。之后,应将文件复制到另一台服务器。我正在使用这个命令:
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
内置的 shell。
在后台执行命令,然后告诉 shell 等待所有命令完成后再继续。这是一个非常基本的示例:
#!/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
首先完成。