Linux 기반 임베디드 시스템을 위해 Python에서 다양한 서비스를 구현했습니다. 시스템이 부팅되는 즉시 영구적으로 실행해야하는 드라이버 서비스가 하나 있습니다. 다른 서비스를 적시에 하위 프로세스로 생성하고이 부분을 계속 반복합니다. 내가 달성하고자하는 주요 목표는 시스템이 종료되지 않는 한이 드라이버 서비스가 절대 중지되지 않아야한다는 것입니다. 다음과 같은 옵션이 있습니다.
어떤 옵션을 선택해야하며 그 이유는 무엇입니까? 또한 두 접근법의 근본적인 차이점은 무엇입니까?
먼저 질문 제목을 다룰 것입니다. 데몬과 정상 실행 프로세스의 차이점은 "정상 프로세스"라고 말할 때 대부분의 경우 텍스트 터미널과 같은 사용자 입력 / 출력 API에 연결된 것을 의미한다는 것입니다 ( 일반적으로 파일 설명자 테이블에서 처음 3 개의 파일 설명자를 열고 일종의 가상 터미널에 연결하거나 그래픽 사용자 인터페이스 (Linux 및 UNIX에서 일반적으로 X11 프로토콜을 사용함)를 사용합니다. 반면 데몬은 종종 터미널에서 분리되었거나 처음에 하나에 연결되지 않은 프로세스를 나타냅니다.
질문 자체에 관해서는 데몬으로 실행하거나 "일반 프로세스"로 실행할 때 응용 프로그램이 충돌 할 수 있으며 다시 시작해야합니다. 프로세스가 일부 사용자 터미널에 연결되면 사용자는 오류를 감지하고 응용 프로그램을 다시 시작할 수 있지만 데몬은 일반적으로 해당 기능을 즐기지 못합니다. 데몬이 터미널에서 연결이 끊어지면 해당 프로세스를 감지하기가 훨씬 더 어려워집니다. 프로세스가 충돌했습니다.
이 문제를 해결하기 위해 우리는 서비스 관리 프레임 워크를 발명했습니다. SysV, SystemD, Upstart, Supervisord, runit 등 다양한 기능을 가진 다양한 구현이 있습니다. 그들은 모두 매우 중요한 기능을 공유합니다. 데몬을 시작할 수있는 방법이 있습니다 (종종 부팅시 자동으로) 실패 할 때까지 모니터링 한 다음 다시 시작합니다.
서비스 관리 프레임 워크를 사용하여 장치 드라이버 서비스를 실행해야합니까? 당신은 가장 확실히해야합니다-그것은 유일한 건전한 방법입니다.
사용할 서비스 관리 소프트웨어는 더 어려운 질문입니다. 일반적으로 가장 좋은 선택은 운영 체제가 번들로 제공하는 서비스 관리 소프트웨어를 사용하는 것입니다. 일반적으로이 소프트웨어는 프로세스 ID 0으로 실행되고 커널에 의해 직접 시작됩니다. 현재 최신 Linux 기반 운영 체제에서 가장 눈에 띄는 소프트웨어는 풍부한 종속성 관리 언어, 소켓 활성화, 타이머, 네트워크 및 스토리지 관리 등과 같은 많은 기능을 제공하는 SystemD입니다. AFAIK, 임베디드 Linux 운영 체제에서 이것은 자주 발생하지 않으며 임베디드 시스템이 실패한 서비스를 다시 시작하는 데 그다지 좋지 않은 클래식 SysV를 사용하고있을 가능성이 높습니다 (또는이를 전혀 수행하지 않는 경우가 많음). 스크립트 "와 대부분의 구현은 어떤 종류의 재시작도 수행하지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다