프로그래밍 방식으로 서비스 상태를 확인하는 코드를 작성하려고 하지만 서비스 이름의 오타에도 강력합니다. 제 생각에는 합리적인 프로그램은 다음과 같은 동작과 의미를 가져야 합니다.
- 단위 이름을 인수로 사용합니다.
- 장치가 발견되면 서비스 상태를 인쇄하고 상태 0(예: 활성, 비활성 등)으로 종료됩니다.
- 단위가 다음과 같은 경우아니요발견/로드된 경우 오류를 인쇄하고 0이 아닌 상태로 종료됩니다.
특히 다음은 이 요구 사항을 충족하지 않습니다.
systemctl is-active servicename
(장치가 활성화되지 않은 경우 0이 아닌 반환 상태로 종료되고, servicename이 로드되지 않은 경우에도 동일하게 동작합니다)systemctl is-failed servicename
(위와 비슷한 동작)systemctl show servicename -pActiveState
(servicename이 로드되지 않은 경우 종료 상태는 0입니다)
이것이 가장 가까운 것 같지만 systemctl show servicename -pLoadState -pActiveState
오타가 있는지 확인하기 위해 LoadState 문자열을 구문 분석해야 하는데 이는 이 간단한 작업에 필요한 것보다 더 복잡해 보입니다.
어떤 제안이 있으십니까?
답변1
어떤 제안이 있으십니까?
시스템화된 사람들은 2014년부터 여전히 존재하는 버그를 수정하도록 권장됩니다.
매뉴얼 systemctl
에는 systemd에서 호출되는 적절한 LSB 버전 3 종료 상태가 문서화되어 EXIT_PROGRAM_OR_SERVICES_STATUS_UNKNOWN
있으며 이 종료 상태는 다음과 같습니다.심지어 사용systemctl status
존재하지 않는 서비스 의 경우 존재하지만 실행되지 않는 서비스와 구별합니다.
그러나 사용되지 않습니다 systemctl is-active
.
추가 읽기
- 밴더버그(2014-12-18).
systemctl status
성공적으로 완료된 서비스가 실패 상태로 종료되었습니다.. 버그 #77507. freedesktop.org. - Lennart Petlinget al. (2017). "종료 상태"
systemctl
..systemd 매뉴얼 페이지.