我想知道是否可以在一行中重写下面的脚本?可能用||
?
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
,所以我用它来替换。