시스템이 정지 된 프로세스를 감지하고 종료 할 수 있습니까?


16

파일 잠금을 사용하는 솔루션을 작업하는 동안 코드가 교착 상태에 빠졌다고 생각합니다. systemd를 사용하여 시스템 시작 프로세스를 시작합니다. alarm (3)을 사용하는 것이 옵션이지만 systemd가 중단 된 프로세스를 감지하고 다시 시작할 수있는 방법이 있는지 궁금합니다.

현재이 문제를 피하기 위해 journalctl 출력을 볼 계획이며 일정 시간 동안 변경되지 않으면 쉘 스크립트를 통해 프로세스를 종료합니다.

시스템을 통해 또는 프로세스를 통해 프로세스를 모니터링하는 더 좋은 방법이 있는지 궁금합니다.


아마 아닙니다. 프로세스가 중단되었는지 어떻게 알 수 있습니까? 만약 당신이 정말로 뭔가가 필요하다면 for(;;) do_something();?
mvp dec

4
엄밀히 말하면 코드가 중단되면 해당 문제를 디버깅해야합니다. systemd (내가 믿지 않는 것으로 가정 할 수 있다고 가정)를 통해 또는 다른 방법으로 디버그하면 디버그 할 때 올바른 방법입니다. 그러나 교착 상태에 빠질 수는 없습니다.
MariusMatutiae

답변:


25

예; 그러나 systemd를 다루기 전에 먼저 버그가 많은 프로그램을 수정하십시오.

MariusMatutiae는 매우 정확합니다. 프로그램에 문제가 있습니다. 교착 상태입니다. systemd를 사용하는 것이 답이 아닙니다. 기껏해야 산만하다. 손상되지 않도록 프로그램을 수정하십시오. 에너지를 올바른 일로 인도하십시오.

즉, 다른 사람들은 질문이 아닌 질문 제목 때문에 여기에 올 것입니다. 그들의 이익을 위해, 제목에 대한 대답은 다음과 같습니다.

예, systemd는 dæmon을 모니터링하고 대화가 중지되면 자동으로 다시 시작할 수 있습니다. 하지만 오래된 데몬 만이 아닙니다. mvp가 지적했듯이, 데몬이 중단되었음을 알 수있는 방법은 없습니다 (이 우주에서는 정지 문제를 결정할 수없는 경우). 시스템이나 다른 컴퓨터 프로그램은 그들에게 던져진 임의의 프로그램이 교착 상태에 빠졌거나 무한 루프에 빠졌다는 등을 처음부터 추론 할 수 없습니다. 여기에 도착하는 최선의 방법은 dæmon이 필요한 시간 범위 내에서 정기적 인 "하트 비트"작업을 수행하지 않았 음을 감지하는 것입니다.

따라서 systemd의 워치 독 기능을 이용하는 Dæmon은 시스템 별 프로토콜 인 sd_notify 프로토콜을 사용하도록 작성해야합니다. 이것은 dæmon 코드를 복잡하게 만듭니다. dæmons가 올바르게 작성되면 워치 독 기능을 사용하여 호출되었는지 확인해야하기 때문에 더 복잡합니다.

systemd의 워치 독 기능을 사용하기 위해이 프로토콜을 사용하는 Dæmon…

  • WATCHDOG_USEC환경 변수를 확인해야합니다 .
  • … 약 / 2 간격 ( "USEC"는 마이크로 초를 나타냄)으로 옵션 세트 와 함께 수명주기 동안 sd_notify ()를 지속적으로 자주 호출해야합니다 .WATCHDOG=1WATCHDOG_USEC
  • Type=notify단위 파일에 설정되어 있어야 합니다.
  • ...해야한다 NotifyAccess=main(또는 =all그 장치의 파일) 세트;
  • … 단위 파일에 WatchdogSec=초가 설정되어 있어야 합니다.
  • …와 연결되어야합니다 libsystemd-daemon.so

코딩에 대한 자세한 내용을 알고 싶다면 설명서를 읽은 후 올바른 StackExchange로 이동하십시오. 수퍼 유저입니다. StackOverflow가 저기 있습니다.

추가 자료

  • Lennart Poettering. 2011-04-12. 워치 독 . Freedesktop.org.

2
물론, 나는 문제를 해결해야한다. 나의 유일한 의도는 문제를 알아낼 때까지 임시 해킹을하는 것이었다. 자세한 답변 주셔서 감사합니다.
freethinker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.