bash 스크립트에서 가동 시작 상태를 확인하는 방법은 무엇입니까?


10

Bash 스크립트 내에서 시작 작업이 실행 중인지 어떻게 확인합니까? 즉, 다음과 같은 작업을 수행하려면 "부울"값이 필요합니다.

#!/bin/bash
if [ determine_if_job_x_is_running ]; then
  echo "I see upstart job X is running, please stop it before ..."
fi

답변:


9

나만의 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

2
status $1 2> /dev/null | grep -q "^$1 start" > /dev/null 2> /dev/null조용히 하기 위해 이것을 수정하고 싶을 수도 있습니다 .
David G

1

일반적으로 PID 파일을 사용하지만 pgrep을 사용하여 프로세스를 확인할 수도 있습니다. 서비스가 jobX다음과 같이 작동 한다고 가정하십시오 .

if [ $(pgrep jobX) ]; then

아니면 더 나은

if pgrep jobX > /dev/null 2>&1

1

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로 종료되지 않습니다.


1
변형 ... isRunning = $ (status $ {job} | grep running | wc -l)은 실행 중이면 1을 반환하고 그렇지 않으면 0을 반환합니다.
Naraen

0

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

자체 시작 작업을 작성하는 경우 대신 시작 이벤트 또는 패키지 종속성을 사용해야합니다.


이것은 일종의 텍스트 상태를 인쇄 한 다음 부울 값을 얻기 위해 구문 분석 해야하는 것처럼 보입니다.
laslowh

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.