2014-11-04 41 views
0

我已經做了一個簡單的腳本,檢查服務是否正在運行並返回退出代碼,但我不能讓它工作。如果它工作則退出0,否則退出1。看看服務是否正在運行退出代碼

#!/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 
+1

可能的重複[何時如果構造不需要括號?](http://stackoverflow.com/questions/26725431/when-do-if-constructs-not-require-brackets) – 2014-11-04 17:52:38

+3

看看[pgrep(1 )](http://man7.org/linux/man-pages/man1/pgrep.1.html) – 2014-11-04 17:56:49

+0

我刪除了支架,它的工作。但是當我執行它時,如果服務ssh沒有運行,它只會返回0。 – user3270211 2014-11-04 17:59:43

回答

2

if語句可以與簡單地

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

管道的退出狀態是0,如果成功grep -q(即,匹配ssh),否則爲1來替代。如果這是腳本的最後一行,那麼shell的退出狀態將是相同的:不需要明確調用exit

1

這是問題的原因:

if [ ps aux | grep -v grep | grep $SERVICE > /dev/null ]; 
  • 的語法if語句:if list; then ...ref
  • if選哪個分支執行基於列表
  • 的退出狀態
  • A list基本上是一個命令流水線(ref
  • 您正在使用[命令 - 是的,這不僅僅是語法的命令。 [命令對它接受的參數有具體要求(ref
  • [不喜歡您給它的參數。

你想這樣做

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

,或者更好,採取chepner的建議,並接受他的答案。

相關問題