Como executar o programa depois de concluir um processo

0

Então eu tenho o arquivo backup.php que cria backup da conta do usuário. Usando top -c | nome de usuário grep, Eu pude ver que o processo está acontecendo,

top -c | grep newin mostra abaixo

11334 root      39  19  128m  38m 7036 S 10.3  0.1   0:00.57 pkgacct - newin - av: 4 - write compressed stream
11351 newin     39  19  130m  33m 2792 S  3.7  0.1   0:00.11 pkgacct - newin - av: 4 - create tar stream
11334 root      39  19  128m  38m 7036 S  9.3  0.1   0:00.85 pkgacct - newin - av: 4 - write compressed stream
11351 newin     39  19  130m  34m 2792 S  1.3  0.1   0:00.15 pkgacct - newin - av: 4 - create tar stream
11334 root      39  19  128m  38m 7036 S 10.6  0.1   0:01.17 pkgacct - newin - av: 4 - write compressed stream
11412 newin     39  19 83172  16m 3856 S  1.7  0.1   0:00.05  /usr/local/cpanel/bin/ftpput /bacupdrive

Eu quero executar o mail.sh assim que o processo de backup estiver concluído

você pode fornecer alguma ajuda sobre isso?

Obrigado.

    
por user8863627 04.12.2017 / 16:38

2 respostas

1

Eu não executei um servidor da Web no Linux, por isso não sei quais processos serão iniciados quando um script php for executado, mas alguns pontos me ocorrem.

(1) A maneira fácil de verificar se um programa está em execução é usar pidof , que retornará um erro se não for encontrado, por exemplo, para aguardar até que um processo seja concluído, use:

while pidof ProcessName; do sleep 1; done
mail.sh

(2) No entanto, se um script termina e reinicia dentro de um segundo, você pode perder o término, então você precisa de um script mais elaborado:

if p="$(pidof ProcessName)"
then while [ "$(pidof ProcessName)" == "$p" ]; do sleep 1; done
fi
mail.sh

Isso fará com que o PID não mude, como acontecerá em uma nova encarnação de ProcessName .

Obviamente, a duração do atraso precisará ser escolhida como um equilíbrio entre a velocidade com a qual você deseja responder à rescisão e a sobrecarga de verificações mais frequentes.

Uma solução melhor para todos seria se o seu servidor Web tivesse um recurso integrado para iniciar um comando após a conclusão de um script php .

    
por 04.12.2017 / 18:17
1

Use o seguinte comando:

backup.php && mail.sh

o && é um operador booleano AND. Quando backup.php for concluído sem um erro, ele executará mail.sh . Se backup.php gerar um erro, mail.sh não será executado.

Se você não se importa se backup.php gerar um erro, use ; (ponto-e-vírgula) em vez de && :

backup.php; mail.sh

Neste caso, mail.sh será executado em qualquer terminação de backup.php .

    
por 04.12.2017 / 17:35

Tags