2016-08-23 12 views
2

짧은 버전입니다 :Systemd 장치는, 외부 스크립트와 상태를 확인

systemctl status service.service

긴 :

내가 내가 내가 전화 스크립트의 리턴 코드를 확인하려는 systemd 단위가 버전 : 나는 상태를 매개 변수로 전달했을 때 여러 프로세스의 상태를 검사하고 리턴 코드에 기반하여 init 시스템이 소프트웨어의 상태를 올바르게 반환 한 lsb init 스크립트를 사용했습니다.

이제 스크립트를 systemd에 적용 할 때이 동작을 구성하는 방법을 찾을 수 없습니다.

답변

3

짧은 대답

이것은 시스템에서 불가능합니다. systemctl status 동사는 항상 동일한 작업을 수행하며 사용자 지정 작업에 대해 단위당 재정의 될 수 없습니다.

당신은 Type=oneshotExecStart= 사용자 정의 상태 스크립트를 가리키는으로 foo-status.service 단위 파일을 작성하고 systemctl start foo-status를 실행할 수 있습니다

긴 대답. 그러나 이것은 0/0이 아닌 정보만을 제공합니다 (0이 아닌 종료 코드는 1로 변환됩니다).

상태 스크립트의 실제 종료 코드를 얻으려면 systemctl show -pExecMainStatus foo-status을 실행하십시오. 그러나 여기까지 가면 스크립트를 직접 실행하는 것이 더 간단합니다.

0

시작/중지하는 서비스 코드를 제어하는 ​​경우 쉽게 편집하고 결과를 파일에 저장할 수 있습니다.

그렇지 않으면 언제나 래퍼를 추가 할 수 있습니다.

#!/bin/sh 
/path/to/service and args here 
echo $? >/run/service.result 

그런 다음 상태는 해당 파일의 내용을 사용하여 액세스 할 수 있습니다

STATUS=`cat /run/service.result` 
if test $STATUS = 1 
then 
    echo "An error occurred..." 
fi 

(사이드 참고 :. /run/ 당신이 루트가 아닌 경우 /tmp/를 사용하여 루트 만 쓰기 가능)