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