데이터베이스(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에 대한 초기 연결 속도가 느림[스팸 방지 기능])은 나머지 속도를 늦추지 않고 병렬로 이루어질 수 있습니다.