실행 중인 서비스 하나만 확인하는 권장 방법은 무엇인가요?

실행 중인 서비스 하나만 확인하는 권장 방법은 무엇인가요?

mongod 서버가 실행 중인지 확인하고 그렇지 않은 경우 시작하기 위해 쉘 스크립트를 작성 중입니다. 이를 달성하기 위해 다음 명령을 사용합니다.

systemctl is-active --quiet mongod

그러면 예상대로 작업이 수행됩니다. 하지만 내 스크립트는 아마도 systemd 없이 시스템에서 실행될 것이므로 이를 수행할 수 있는 더 이식 가능한 방법이 있는지 알고 싶습니다.

답변1

이것은 완벽하지는 않지만 많은 시스템에서 작동합니다. 이름이 약간 다를 수 있거나 전달하는 이름이 다른 이름의 하위 문자열일 수 있으므로 이 pgrep접근 방식은 최적이 아니지만 시작에 불과합니다.

#!/usr/bin/sh

if systemctl is-active --quiet "$1"  > /dev/null 2>&1; then
  echo "Running! (systemctl)"
elif service "$1" status  2>&1 | grep -Eq 'is running|: active (running)'; then
  echo "Running! (service)"
elif pgrep "$1" > /dev/null 2>&1 ; then
  echo "Running (pgrep)"
else
  echo "Not running"
fi

다른 이름으로 저장 checkIfRunning하고 다음과 같이 실행하세요.

checkIfRunning mongod

답변2

이를 달성할 수 있는 이식 가능한 방법은 없습니다. 그러나 현재 많은 Linux 배포판에는 service시스템 지원 운영 체제에서 실행될 경우 프록시 역할을 하는 오래된 레거시 명령이 있습니다.systemctl

따라서 다음과 같이 명령을 실행할 수 있습니다.

# service sshd status
Redirecting to /bin/systemctl status sshd.service
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-02-20 12:16:17 UTC; 1 weeks 2 days ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 3388 (sshd)
   CGroup: /system.slice/sshd.service
           └─3388 /usr/sbin/sshd -D

관련 정보