항상 실행되어야 하는 서비스가 있습니다. 서비스가 언제 중지되거나 다시 시작되는지 알고 싶습니다.
서비스의 PID 참조를 고려했습니다. 재부팅하면 새로운 PID를 얻게 됩니다. 그래서 pid가 변경되면 경고나 이메일을 보내고 싶습니다. 이를 수행하는 가장 덜 침해적인 방법은 무엇입니까?
이제 5분마다 파일에 pid를 쓰는 cron 작업이 생겼습니다. 이 파일의 pid 변경을 모니터링할 수 있는 Linux 도구가 있습니까? 아니면 외부에서 실행되는 Python 스크립트와 같이 이 파일을 추출하고 그런 방식으로 모니터링할 수 있는 다른 것이 있어야 합니까?
답변1
빈스 씨, 지속적인 모니터링을 위해서는 Nagios와 같은 오픈소스 솔루션을 살펴보는 것이 좋습니다. 귀하의 질문에 대해 아래 BASH 스크립트 prog_stat.sh는 매초마다 DATE 및 PID를 파일에 기록한 다음 스크립트에 추가하여 PID 변경 사항을 구문 분석하고 후속 조치를 추가할 수 있습니다. CTRL-C 죽이기
Nagios 개발에 사용하는 머신이 있습니다. 이 스크립트는 매초마다 해당 머신의 Nagios PID를 확인합니다. 수면을 변경하여 시험 빈도를 변경하십시오.
#!/bin/bash
PROG=Nagios
LOG=/home/user/nagios_pid.log
echo "" > $LOG
while true; do
PID=`ps ax | grep -i "$PROG" | awk 'NR==1{print $1}'`
echo `date -u` " " $PID >> $LOG
sleep 1
done
exit
스크립트 출력
[user ~]#cat nagios_pid.log
Sat Mar 30 11:15:50 UTC 2019 1171
Sat Mar 30 11:15:51 UTC 2019 1171
Sat Mar 30 11:15:52 UTC 2019 1171
Sat Mar 30 11:15:53 UTC 2019 1171
Sat Mar 30 11:15:54 UTC 2019 1171
Sat Mar 30 11:15:55 UTC 2019 1171
Sat Mar 30 11:15:56 UTC 2019 1261
Sat Mar 30 11:15:57 UTC 2019 1261
Sat Mar 30 11:15:58 UTC 2019 1261
Sat Mar 30 11:15:59 UTC 2019 1261
변경 사항 정리:
[user ~]# sort -k 7,7 -u nagios_pid.log
Sat Mar 30 11:15:50 UTC 2019 1171
Sat Mar 30 11:15:56 UTC 2019 1261
이제 잠재적으로 긴 파일을 수동으로 구문 분석할 필요 없이 서비스가 다시 시작된 시기를 확인할 수 있습니다.
-표시
답변2
시스템이 systemd에 의해 제어되고 많은 최신 시스템이 제어되는 경우( systemctl
이런 경우인지 확인하려면 입력하세요) 서비스가 다시 시작될 때 조치를 취하도록 구성할 수 있습니다.이 답변ServerFault에는 단 하나의 예만 제공됩니다.
또 다른 해결책은 서비스가 종료될 때 이를 알려주는 셸 스크립트로 서비스를 래핑하는 것입니다. 그러나 프로세스가 자체적으로 데몬화되는 경우에는 작동하지 않습니다.