在nice命令完成后运行命令

在nice命令完成后运行命令

我有 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首先完成。

相关内容