Pausando e reiniciando todos os processos do Python

0

Eu tenho um servidor que executa nossos scripts de back-end para nosso banco de dados (processos ETL, etc). No entanto, durante duas horas por dia, dedicamo-lo a enviar nossos e-mails. Os e-mails são a principal prioridade, no entanto, às vezes, eles se tornam muito intensivos em memória e todos os processos no servidor travam. Devido a isso, eu gostaria de pausar temporariamente todos os scripts ETL (escritos em Python) enquanto o sistema de e-mail está sendo executado. Depois de concluído, eu quero que ele retome esses scripts assim que o sistema de email for concluído.

Digamos que o sistema de e-mail seja executado em três versões com os seguintes executáveis:

/usr/bin/php /home/Email/main.php --action=set1
/usr/bin/php /home/Email/main.php --action=set2
/usr/bin/php /home/Email/main.php --action=set3

Eu posso envolver esses três em um arquivo de script. No entanto, nesse script, preciso pausar e iniciar todos os scripts do Python. A partir da pesquisa na troca de pilha, parece que posso executar o seguinte:

kill -TSTP [pid]
/usr/bin/php /home/Email/main.php --action=set1 &
/usr/bin/php /home/Email/main.php --action=set2 &
/usr/bin/php /home/Email/main.php --action=set3 &
wait
kill -CONT [pid]

onde pid é o ids do processo dos meus scripts Python (existem vários scripts). A minha pergunta é, como eu posso ajustar isso para recuperar o pid de todos os scripts Python em execução e percorrê-los nisto? Nota: isto está sendo executado no Ubuntu 14.04.2. Quaisquer outras sugestões também serão apreciadas. Obrigado.

Solução

A solução no meu sistema foi a seguinte:

pkill -STOP python
/usr/bin/php /home/Email/main.php --action=set1
/usr/bin/php /home/Email/main.php --action=set2
/usr/bin/php /home/Email/main.php --action=set3
pkill -CONT python
    
por user2694306 27.02.2016 / 15:17

2 respostas

2

Para descobrir pids de processos Você pode usar pgrep

No seu caso, você pode usar pkill .

pkill -TSTP Email 
pkill -CONT Email 

allthough provavelmente melhor correspondência do nome do processo seria sábio

    
por 27.02.2016 / 15:28
2

Verifique killall ou pkill ( pgrep ).

Mas eu acho que a melhor maneira para o nosso caso: configurar um MTA simples de envio que enfileira as mensagens e defini-lo como alta prioridade (com nice ), para que seu código PHP não seja interrompido, e o envio (a conexão lenta criando na rede, a conexão inicial lenta com o MTA do outro lado [recurso anti-spam]) pode ir em paralelo, sem atrasar o restante.

    
por 27.02.2016 / 15:28