查看服务是否正在运行退出代码

时间:2014-11-04 17:50:21

标签: linux bash if-statement grep

我制作了一个简单的脚本来检查服务是否正在运行并返回退出代码,但我无法使其正常工作。如果有效则退出0,否则退出。

#!/bin/bash

#Plugin for checking if the SSH service is running

SERVICE='ssh'

if [ ps aux | grep -v grep | grep $SERVICE > /dev/null ];
then
        exit 0
else
        exit 1
fi

2 个答案:

答案 0 :(得分:2)

if语句可以简单地替换为

ps aux | grep -v grep | grep -q "$SERVICE"

如果grep -q成功(即匹配ssh),则管道的退出状态为0,否则为1。如果这是脚本的最后一行,则shell的退出状态将是相同的:不需要显式调用exit

答案 1 :(得分:1)

这是问题的原因:

if [ ps aux | grep -v grep | grep $SERVICE > /dev/null ];
  • if语句的语法:if list; then ...ref
  • if根据列表的退出状态选择要执行的分支
  • list基本上是一个命令管道(ref
  • 您正在使用[命令 - 是的,这不仅仅是语法命令。 [命令对其接受的参数(ref
  • 有特定要求
  • [不喜欢你给它的论据。

你想这样做

if ps aux | grep -v grep | grep $SERVICE > /dev/null; then

或者,更好的是,采取chepner的建议并接受他的回答。