Executa um script a cada minuto sem cron e permitindo que as crianças

0

Eu escrevi dois scripts php, um trabalhador e um mestre.

Se eu executar o master manualmente, ele verifica um sistema rabbitmq e gera 1 worker para cada fila detectada. Então, se eu executar o mestre novamente, ele verificará se o processo de cada operador ainda está em execução, se estiver, então não fará nada se não for reiniciado.

Conceito bastante simples que eu teria pensado. Eu consegui usando nohup e & no mestre para cada criança que gera, agora como tenho certeza que você pode imaginar que eu quero executar o mestre a cada 60 segundos para verificar se as filas estão vivas e reavive-las se não estiverem.

Isso me dá o problema de não poder usar o nohub em tarefas do cron e apenas usar o & por si só não parece funcionar. Tanto quanto eu posso dizer os trabalhadores não estão mesmo executando com a chamada

Eu tentei criar um script de shell separado que, em seguida, chama master.php também não funcionou. Eu tentei criá-lo como uma tarefa iniciante, em seguida, lembrei que no Ubuntu 17+ upstart é removido.

Estou aberto a qualquer sugestão de maneiras diferentes de fazer isso, mas qualquer que seja o caminho que eu tome, deve permitir que meu master.php crie os arquivos work.php como processos em segundo plano sem título.

    
por Dave 16.08.2018 / 15:52

2 respostas

1

#!/bin/bash
#I am just like a system daemon... 
#I do not need nohup for work, and I should not be called from cron.

#My name is main_safe
#I will become a separeted process even if my father dies... 
#i will check if main is still alive, and if dies i will restart it
#nohup is not needed inside shell script. 
#IMPORTANT: to die is very different from to freeze 
main_safe(){
trap "" HUP
while sleep 120; do
   main&
   wait 
done

}

#My name is main I like to keep restarting php master.php
#everytime it go away... remove wait and I will keep starting master.php with absolutely no reason.
#If you are paranoid you can program me to restart main_safe,
#But what will happen if you try to stop me? Bad things.. so... 
#IMPORTANT: to die is very different from to freeze 
main(){
trap "" HUP
while sleep 60; do

     php master.php & 
     #do whatever you want here

     #uncomment this to prevent two instances of master.php from going up maybe it is necessary:
     wait

done
}


#nohup is not needed in shell script
main_safe& 
pstree -p | grep $! 

Isso é aceitável?

    
por 16.08.2018 / 16:43
1

Que tal usar o systemd? Fiz algumas pesquisas e, como o systemd substitui o upstart para as versões mais recentes do ubuntu, isso pode ser útil. O link abaixo pode ser útil.

Oceano Digital: Como configurar um serviço Linux para iniciar automaticamente após uma falha ou reinicialização

    
por 16.08.2018 / 17:11

Tags