【问题标题】:Can I check Ngnix running status and return 1 or 0 based on the state?我可以检查 Nginx 运行状态并根据状态返回 1 或 0 吗?
【发布时间】:2019-05-01 15:59:03
【问题描述】:

我有一个命令检查端口是否打开并返回零或一。

netstat -ano | grep ':443\s' | if grep -q LISTEN; then echo 0; else echo 1; fi

我想知道如何编写命令来检查 nginx 是否正在运行并返回 1 或 0?

【问题讨论】:

  • pgrep nginx >/dev/null; echo $? ?此外,您的代码返回 0,并根据端口打印 0 或 1。
  • foo () { netstat -ano | grep '443\s' | grep -q LISTEN; }foo 的退出状态如果在端口上找到“LISTEN”则为 0,否则为 1。
  • @KamilCuk 谢谢你让它变得如此简单,这就是我所期待的

标签: linux bash nginx scripting


【解决方案1】:
pidof nginx && echo 1 || echo 0

【讨论】:

  • 如何在输出中隐藏 PID? pidof nginx && echo 0 || echo 1 输出 12258 12256 0
【解决方案2】:

你可以使用系统包自带的pidof工具(例如RedHat GNU/Linux发行版下的procps-ng),重定向你不想要的输出,并设法给你想要的状态。

为了可持续性,我给你写了这个小脚本,你可以集成到你的脚本中:

#!/bin/bash

function isRunning() {
  local _processName="$1"
  pidof "$_processName" >/dev/null
}

isRunning nginx && echo "It is running" || echo "Not running"

如果你真的想回显一个 1 或 0,你可以,但它通常没用。

你可以根据isRunning这个函数的返回来代替。

根据您的评论进行编辑:您可以将其用于任何流程:

#!/bin/bash

function isRunning() {
  local _processName="$1"
  echo -ne "Checking if $_processName is running ... " 
  pidof "$_processName" >/dev/null && echo "1" || echo "0"
}

isRunning nginx
isRunning java
isRunning httpd

如果你不想要 0/1 以外的任何东西,你可以删除函数中的回声。

【讨论】:

  • 我想要 1 或 0,因为我正在通过 AWS cloudwatch 对其进行监控,如果 nginx 停止,我们计划发出警报,顺便说一下,我可以将此脚本用于其他进程,例如 java还是 HTTPD?
  • 嗨,你可以;这就是为什么我写了一个你可以使用的函数。您只需要指定要检查的名称即可。我会更新我的答案。
  • 谢谢伙计,这真的很有帮助@Bsquare
  • 当我手动运行以下脚本时,值很好,但是当我通过 cronjob 运行它时,值会有所不同,知道吗? #!/bin/bash NGINXSTATUS=$(pidof "$nginx" >/dev/null && echo "0" || echo "1") echo $NGINXSTATUS >> a.txt
  • 是的。您在 crontab 和控制台中使用的用户是什么?无论如何,您必须在 nginx 之前删除 $。
【解决方案3】:

使用 systemd 你可以使用“systemctl status nginx”然后查看“$?”变量(最后执行命令的退出代码)。

我认为这样的事情可以完成这项工作:

systemctl status nginx >/dev/null 2>&1; if [ $? -gt 0 ]; then echo 0; else echo 1; fi

【讨论】:

    【解决方案4】:

    最好的方法是使用 systemd,因为 Nginx 作为服务运行。您甚至可以稍后根据 systemd 退出代码来解释 running 函数的状态。

    function running() { 
       [[ ! -z $1 ]] &&   systemctl status $1 2>&1 >/dev/null  || return 255; 
       return $?; 
    }
    
    running nginx && echo "Its running" || echo "Its not"
    

    【讨论】:

    • 你能解释一下这行发生了什么吗? [[ ! -z $1 ]] && systemctl status $1 2>&1 >/dev/null || return 255;
    • 是的,基本上它通过检查 $1 是否为空来检查您是否确实将参数传递给您声明的函数。如果是,则返回 255,否则,运行 systemctl status YOURSERVICE statemnt,然后在下一行返回 $?然后在我给出的示例中检查变量,如果它为 0,则打印“它正在运行”。对于任何非零退出状态,它都会打印“不是”。您可以对此进行微调并实际检查 systemctl 的每个退出代码的含义,这样您就可以确切地知道它为什么不运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2019-04-03
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    相关资源
    最近更新 更多