모든 Python 프로세스를 일시 중지하고 다시 시작합니다.

모든 Python 프로세스를 일시 중지하고 다시 시작합니다.

데이터베이스(ETL 프로세스 등)에 대한 백엔드 스크립트를 실행하는 서버가 있습니다. 하지만 우리는 하루에 두 시간씩 이메일을 보내는 데 전념하고 있습니다. 이메일은 최우선 사항이지만 때로는 서버 충돌시 많은 메모리와 모든 프로세스를 차지합니다. 따라서 이메일 시스템이 실행되는 동안 모든 ETL 스크립트(Python으로 작성)를 일시적으로 일시 중지하고 싶습니다. 이 작업이 완료되면 이메일 시스템이 완료된 후 해당 스크립트를 다시 시작하고 싶습니다.

이메일 시스템이 3개의 크론에서 실행되고 다음 실행 파일이 있다고 가정합니다.

/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

이 세 가지를 스크립트 파일로 묶을 수 있습니다. 그러나 이 스크립트 내에서는 모든 Python 스크립트를 일시 중지하고 시작해야 합니다. 스택 교환을 검색하면 다음 명령을 실행할 수 있는 것 같습니다.

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]

여기서 pid는 내 Python 스크립트의 프로세스 ID입니다(여러 스크립트가 있음). 제 질문은 실행 중인 모든 Python 스크립트의 pid를 검색하고 이를 반복하도록 이것을 어떻게 조정할 수 있느냐는 것입니다. 참고: 이는 Ubuntu 14.04.2에서 실행됩니다. 다른 제안 사항도 크게 감사하겠습니다. 감사해요.

해결책

내 시스템의 솔루션은 다음과 같습니다.

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

답변1

사용할 수 있는 프로세스의 PID를 찾으려면pgrep

귀하의 경우에 사용할 수 있습니다 pkill.

pkill -TSTP Email 
pkill -CONT Email 

프로세스 이름을 더 잘 일치시키는 것이 현명할 수도 있지만

답변2

killall또는 pkill( )에 체크하세요 pgrep.

하지만 우리의 경우에 가장 좋은 접근 방식은 간단한 전송 전용 MTA를 설정하고 메시지를 대기열에 넣은 다음 높은 우선 순위로 설정하는 것입니다 nice(느린네트워크에서 생성된 연결(다른 쪽 끝의 MTA에 대한 초기 연결 속도가 느림[스팸 방지 기능])은 나머지 속도를 늦추지 않고 병렬로 이루어질 수 있습니다.

관련 정보