是否可以在一行中重写此重启脚本?

是否可以在一行中重写此重启脚本?

我想知道是否可以在一行中重写下面的脚本?可能用||

ps auxw | grep nagios-nrpe-server | grep -v grep > /dev/null

if [ $? != 0 ]
then
        /etc/init.d/nagios-nrpe-server start > /dev/null
fi

我试过了ps auxw | grep nagios-nrpe-server | grep -v grep > /dev/null || /etc/init.d/nagios-nrpe-server start但它总是重启服务,即使它正在运行......

答案1

使用pgrep

pgrep nrpe > /dev/null || /etc/init.d/nagios-nrpe-server start > /dev/null

或者使用子 shell:

(pgrep nrpe || /etc/init.d/nagios-nrpe-server start) > /dev/null

来自pgrep(1)手册页:

pgrep 查看当前正在运行的进程并将符合选择条件的进程 ID 列出到标准输出。

如果进程名称不是nrpe,则需要将参数替换为pgrep实际的进程名称。

答案2

您需要切换 grep 语句。您要过滤掉的第二个语句grep将始终成功,因为它始终存在。

因此,首先过滤掉 grep,然后检查进程:

ps auxw | grep -v grep | grep nrpe > /dev/null || /etc/init.d/nagios-nrpe-server start

根据Debian 软件包列表nagios-nrpe-server 的二进制文件刚刚被称为nrpe,所以我用它来替换。

相关内容