특정 프로세스의 인스턴스가 많이 표시되는 문제가 발생했습니다.
/usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t
몇 가지 내용을 읽었는데 프로세스가 cron 작업의 stdout 출력을 보내기 시작한 것 같지만 어떤 이유로 종료되지 않습니다.
하루에 하나의 프로세스가 있으므로 일일 크론 작업과 관련이 있다고 믿습니다. 이 프로세스의 시작 시간 ps aux
(매일 04:01)은 일일 크론 작업의 시작 시간(매일 04:02)과 일치하는 것으로 보입니다. 그 내용은 /etc/cron.daily
다음과 같습니다:
0anacron 0logwatch cups logrotate makewhatis.cron mlocate.cron rpm tmpwatch
그 내용은 /etc/crontab
다음과 같습니다:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
지금까지는 프로세스 수가 많을 때 수동으로 프로세스를 종료했습니다. 그렇지 않으면 서버의 리소스가 부족해지고 서버에서 실행되는 서비스가 중지됩니다. 최악의 시나리오에서는 이러한 프로세스를 종료하기 위해 다른 cron을 설정하기만 하면 되지만 소스에서 문제를 방지하는 것이 좋습니다. 이 문제의 원인을 아는 사람이 있나요? 누구든지 디버깅 단계를 제공할 수 있나요?
답변1
문제는 sendmail에 전혀 없습니다. crond 를 사용하여 pstree
중단되지 않고 종료되지 않고 crond의 부모가 되는 프로세스가 더 많다는 것을 확인할 수 있었습니다. 각 프로세스를 살펴본 결과 그 중 하나가 다음을 수행하는 것으로 나타났습니다.
cat /var/log/some_log_file
그렇게 하다가 ls /var/log/some_log_file
보니
/var/log/some_log_file|
some_log_file
실제로 명명된 파이프입니다! 크론 작업이 파이프에서 데이터를 읽으려고 시도하지만 파이프에 아무 것도 전송되지 않기 때문에 종료되지 않는 것 같습니다.
수정사항으로 삭제하고 일반파일로 만들었습니다.