仅检查一项正在运行的服务的推荐方法?

仅检查一项正在运行的服务的推荐方法?

我正在编写一个 shell 脚本来检查 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 发行版都有旧的遗留命令,如果在 systemd 支持的操作系统上运行,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

相关内容