Então, eu tenho o arquivo backup.php que cria um backup da conta do usuário. Usando top -c | grep nome de usuário, pude ver que o processo está em andamento,
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
Quero executar o mail.sh assim que o processo de backup estiver concluído
você pode, por favor, fornecer alguma ajuda nisso?
Obrigado.
Respostas:
Eu não tenho um servidor Web no Linux, então não sei quais processos serão iniciados quando um
php
script for executado, mas alguns pontos me ocorrem.(1) A maneira mais fácil de verificar se um programa está em execução é usar
pidof
, o que retornará um erro se não for encontrado, por exemplo, para esperar até que um processo seja concluído, use:(2) No entanto, se um script terminar e reiniciar dentro de um segundo, você poderá perder a finalização, portanto precisará de um script mais elaborado:
Isso garantirá que o PID não mude, como acontecerá em uma nova encarnação do
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 das verificações com excesso de frequência.
Uma solução melhor seria se o seu servidor da Web tivesse um recurso embutido para iniciar um comando na conclusão de um
php
script.fonte
Use o seguinte comando:
o
&&
é um operador booleano AND. Uma vezbackup.php
concluído sem erro, ele será executadomail.sh
. Sebackup.php
lançar um erro,mail.sh
não será executado.Se você não se importa se
backup.php
gera um erro, use um;
(ponto e vírgula) em vez de&&
:Nesse caso,
mail.sh
será executado após qualquer rescisão debackup.php
.fonte
backup.php
e quando saimail.sh
é executado (ou não, no caso de&&
status de saída diferente de zero). Se você deseja acionarmail.sh
quando o já iniciadobackup.php
terminar (sua pergunta não está clara sobre isso), então esta resposta não se aplica, use a resposta do AFH . Também sebackup.php
bifurca- se no fundo; ou gera crianças em segundo plano, as repudia e sai; ou aciona qualquer daemon para fazer algo e sai - então você pode considerar que "não foi concluído" quando formalmente está.