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
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
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
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.
Tags linux scripting shell-script