특정 애플리케이션이 사용하는 시스템 서비스 유형을 결정하는 방법

특정 애플리케이션이 사용하는 시스템 서비스 유형을 결정하는 방법

Typesimple나는 systemd가 구성할 수 있는 다양한 서비스(예 : oneshot등) 를 비교적 잘 다루고 있다고 생각합니다 .

이것문서옵션에 대한 상당히 합리적인 개요와 설명이 제공됩니다. 최선의 선택을 "추측"하고 "시행착오"를 통해 이를 확인하는 것이 가능한 경우가 많습니다. 이는 특히 나에게 매우 친숙한 응용 프로그램에 해당됩니다.

그러나 "시행 착오" 테스트 중에 제가 고려하지 않은 상황(예: 극단적인 오류의 위험)이 발생할 수 있다는 점이 걱정됩니다. 그래서 저는 어느 것이 가장 좋은지 결정하기 위해 애플리케이션을 테스트/조사하는 방법에 대한 조언을 찾고 있습니다 Type.

FWIW, 응용 프로그램을 수동으로 시작하고 분기 여부(여러 프로세스 등)에 관계없이 응용 프로그램이 어떻게 응답하는지 추적하는 방법을 생각하고 있습니다. 내가 놓친 이 작업을 수행하려면 비교적 간단한 방법(표준 명령줄 도구 사용)이 있어야 한다고 생각합니다.

관련성이 있는지는 잘 모르겠지만 Debian이 제가 선택한 배포판입니다.

답변1

(에서 복사Super User.SE에 대한 내 답변입니다.)

명령줄에서 수동으로 서비스를 시작하면 어떻게 됩니까 ( nohup접두사 명령이나 접미사를 사용하지 않고 백그라운드에서 실행 &, 즉 ExecStart=파일 줄에 입력한 명령 만 실행)?.service

ㅏ)서비스가 시작되어 계속 실행되고 Ctrl-C를 누르거나 서비스를 중지할 때까지 프롬프트가 반환되지 않으면 Type = simple올바른 선택입니다.

비)프롬프트가 반환되었지만 서비스가 백그라운드에서 계속 실행되는 경우(즉, 서비스가 자체적으로 데몬화되는 경우) 이것이 Type = forking올바른 선택입니다.

씨)서비스가 작업을 완료하고 실행 중인 항목을 그대로 유지한 채 프롬프트로 돌아간다면(예: 서비스가 일부 커널 설정을 조정하거나 다른 항목에 명령을 보내거나 유사한 작업을 수행하는 경우) Type = oneshot올바른 선택일 수 있습니다. 이 경우 ExecStart제공되는 것은 무언가를 "설정"하는 명령일 수도 있고 ExecStop이를 "설정 해제"하는 해당 명령일 수도 있습니다. 이 유형은 일반적으로 의 이점을 활용하므로 RemainAfterExit=truesystemd는 최근에 항목이 "설정"되었는지 "설정 해제"되었는지에 따라 서비스의 "상태"를 추적합니다.

다른 Type값은 특별한 경우입니다. 예를 들어 서비스가 D-Bus 연결을 사용하는 경우 이것이 Type = dbus최선의 선택일 수 있습니다. 이 사실을 알고 systemdsystemd는 D-Bus에 존재하는 서비스(및 이에 의존하는 모든 항목)를 추적합니다.

사용하려면 Type = notify프로세스가 환경 변수에 지정된 Unix 소켓에 연결할 수 있어야 하며 $NOTIFY_SOCKET필요한 경우 소켓에 메시지를 작성하여 상태를 보고할 수 있어야 합니다. 또한 서비스 파일은 NotifyAccess알림 소켓에 대한 액세스 권한을 부여하기 위한 적절한 옵션을 지정해야 합니다.

명령줄 유틸리티 systemd-notify와 C 라이브러리 기능을 사용하여 sd_notify(3)이러한 메시지를 보낼 수 있지만 둘 중 어느 것도 요구 사항에 맞지 않으면 고유한 메시지 보낸 사람을 구현할 수 있습니다. 필요한 메시지는 매우 간단하며 셸 변수 할당처럼 보입니다. 예를 들어 서비스가 시작을 성공적으로 완료하고 들어오는 요청을 처리할 준비가 되었음을 서비스에 알리려면 서비스는 출력에 해당하는 문자열을 printf "READY=1\n"소켓으로 보내야 합니다. man 3 sd_notify인식된 메시지에 대한 자세한 내용은 리소스를 참조하세요.

참고: 많은 Unix 스타일 시스템에 이식할 수 있도록 설계된 많은 서비스 응용 프로그램은 기본적으로 b)와 같이 동작할 수 있지만 옵션(종종 "포크하지 않음", "계속 실행"으로 설명됨)을 추가하여 그렇게 할 수 있습니다. ) "포그라운드에서 작업", "데몬화하지 않음" 등). 이 경우 옵션에 다른 부작용이 없으면 옵션을 추가하고 a) 유형 동작을 사용하는 것이 좋습니다 systemd.

관련 정보