Execute o comando depois que o comando for concluído

2

Eu tenho 3% de comandosnice que estão descarregando alguns bancos de dados e compactando ativos para um backup. Depois disso, os arquivos devem ser copiados para outro servidor. Estou usando este comando:

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

Meu problema é que os comandos scp parecem ser executados, ANTES que os bons comandos sejam concluídos. Isso leva a despejos parciais de SQL e às vezes arquivos zip quebrados.

Então, como posso ter certeza de que todos os 3 bons comandos foram concluídos antes de copiar os arquivos para outro servidor?

    
por 23tux 23.07.2013 / 01:31

1 resposta

0

Você deseja usar o shell wait incorporado.

Execute comandos em segundo plano e depois peça ao shell para esperar que todos terminem antes de continuar. Aqui está um exemplo muito básico:

#!/bin/bash

sleep 6 && echo first sleep  &
WAITPID="$!"
sleep 3 && echo second sleep &
WAITPID="$WAITPID $!"

echo "waiting"
wait $WAITPID
echo "done waiting"

Notas:

  • O pid dos processos em segundo plano é coletado em WAITPID e a lista é alimentada para wait . Você também pode usar números de trabalho.
  • Quando você executar isso, verá que second sleep termina primeiro.
por 23.07.2013 / 07:58