답변:
나만의 Bash 함수를 만들고 이것을 다음에 넣으십시오 ~/.bashrc
.
check_upstart_service(){
status $1 | grep -q "^$1 start" > /dev/null
return $?
}
나는 출력을 파싱하는 방법을 정말로 좋아하지 않지만 다른 분명한 방법은 보이지 않습니다. 이 경우 Upstart documentation에<service name> start
지정된 출력 이 매우 안정적 입니다.
이제 다음과 같이 사용할 수 있습니다.
if check_upstart_service ssh; then echo "running"; else echo "stopped"; fi
bash에 포함 된 문자열을 기반으로합니다 .
job='your_job_name'
job_status=$(status ${job})
if [[ ${job_status} == *running* ]]
then
# do whatever you need
else
# do whatever you need
fi
첫 번째 충동은 ImaginaryRobots에서 제공 한 코드 변형을 사용하는 것이 었습니다
job='your_job_name'
dbus-send --system --print-reply --dest=com.ubuntu.Upstart \
/com/ubuntu/Upstart/jobs/${job}/_ \
org.freedesktop.DBus.Properties.Get string:'' string:state
어떤 것을 반환합니다
메소드 return sender = : 1.0-> dest = : 1.94 reply_serial = 2 변형 문자열 "running"
위의 솔루션을 사용하여 반환 된 문자열에 "running"이 포함되어 있는지 확인하십시오. 그러나 작업이 실행 중이 아닌 경우 dbus 호출은 예상대로 "대기 중"을 반환하는 상태 1로 종료됩니다.
status ${job}
그러한 작업이없는 경우를 제외하고는 상태 1로 종료되지 않습니다.
DBUS를 사용하여 해당 특정 서비스의 상태를 쿼리합니다.
$ job=myjob
$ dbus-send --system --print-reply --dest=com.ubuntu.Upstart /com/ubuntu/Upstart/jobs/${job}/_ org.freedesktop.DBus.Properties.GetAll string:''
http://upstart.ubuntu.com/cookbook/#get-status-of-job-via-d-bus
자체 시작 작업을 작성하는 경우 대신 시작 이벤트 또는 패키지 종속성을 사용해야합니다.
upstart status 명령은 Linux Standard Base 프로젝트의 init 스크립트 사양을 따르는 것으로 보입니다. 즉, 종료 코드 0은 프로그램이 실행 중임을 의미하고 종료 코드 1-3은 실행 중임을 의미하며 다른 종료 코드는 정의되지 않은 상태를 의미합니다.
참조 : http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/iniscrptact.html
status $1 2> /dev/null | grep -q "^$1 start" > /dev/null 2> /dev/null
조용히 하기 위해 이것을 수정하고 싶을 수도 있습니다 .