systemd: 서비스가 실행되고 있지 않은지 확인

systemd: 서비스가 실행되고 있지 않은지 확인

서비스가 실행되고 있지 않은지 스크립트에서 확인하기 위해 다음을 시도했습니다.

systemctl is-active some.service

서비스가 실행 중이 아니거나 존재하지 않는 경우 종료 코드 3과 함께 "inactive"를 반환합니다.

그러나 때때로 종료 코드 3과 함께 "알 수 없음"이 반환되는 경우 이에 대한 설명은 여기에서 찾을 수 있습니다.https://bugzilla.redhat.com/show_bug.cgi?id=1073481

상태는 시스템 관리자에서 단위를 생성하는 더 복잡한 기능입니다. 가비지 수집기가 이를 처리할 때까지 is-active를 통해 상태를 확인할 수 있습니다.

따라서 기본적으로 및 systemctl status some.service가비지 수집기와 같은 것을 호출하면 결과가 변경되므로 is-active신뢰할 수 없습니다.

같은 토론에 사용된 제안

systemctl show some.service -p ActiveState

"사령부의 안정성을 약속"합니다.

그러나 한 시스템에서는 Unit some.service could not be found.존재하지 않는 서비스에 대해 코드 1을 얻고 종료하고, 다른 시스템에서는 ActiveState=inactive코드 0을 얻고 종료합니다.

그렇다면 서비스가 실행되고 있지 않은지 어떻게 확실하게 확인할 수 있습니까?

종료 코드가 0이 아니거나 ActiveState=inactive인 경우 이것이 사실입니까?

답변1

따라서 먼저 서비스의 정확한 이름을 알아야 합니다. 때로는 서비스 이름이 apache이고 데몬 이름이 httpd인 경우도 있습니다. 따라서 이를 방지하려면 서비스의 정확한 이름을 알아야 하며 다음을 통해 모든 서비스를 얻을 수 있습니다.

systemctl list-unit-files

따라서 검색을 개선하려면 다음을 사용할 수 있습니다 grep.

systemctl list-unit-files | grep "part_of_servicename_expected"

Ambigius 상태 httpd 및 apache 예

systemctl list-unit-files | grep -i "apache"

그 후 결과를 얻으면 다음을 수행해야 합니다.

systemctl status servicename.service

관련 정보