用于验证正在运行的进程是否不起作用的 Bash 脚本

skr*_*skr 8 bash process administrator

我有一个简单的脚本,如下所示,用于检查fail2ban服务是否在 Ubuntu 18.04 上运行:

#!/bin/bash

# Script to check if fail2ban service is running

if pgrep -x "fail2ban" > /dev/null
then
   echo "Fail2ban is running"
else
   echo "Fail2ban is not running"
fi
Run Code Online (Sandbox Code Playgroud)

我已经在测试 VM 中安装了 fail2ban 并且正在 VM 上运行。下面是截图systemctl status命令。

但是,当运行上述脚本时,我得到“Fail2ban 未运行”的结果。我不确定是否与脚本有关。我也尝试过ps aux命令而不是pgrep. 但是,我仍然得到相同的结果

Per*_*uck 13

您要求pgrep精确 ( -x) 搜索一个被调用的进程,fail2ban 但输出systemctl status显示它被调用了 /usr/bin/python3

要检查systemd单元是否正在运行,请使用

systemctl is-active --quiet fail2ban
Run Code Online (Sandbox Code Playgroud)

那是:

if systemctl is-active --quiet fail2ban; then
    echo "running"
else
    echo "not running"
fi
Run Code Online (Sandbox Code Playgroud)

  • 或者,可以使用 `pgrep -f '*fail2ban*'` 进行模式匹配或使用 `pgrep -f '/usr/bin/python3 /usr/bin/fail2ban-server'` 来精确匹配屏幕截图显示的内容 (2认同)
  • `pgrep -f '*fail2ban*'` 可以捕获 `pgrep` 命令本身。 (2认同)