2017-02-08 33 views
0

我試圖寫一個bash腳本,如果Redis的運行,將檢查,如果它不啓動它停止bash腳本:如何從退出的錯誤

ping=$(redis-cli ping) 

if [ "$ping" = PONG ] 
then 
    ECHO "redis response: $ping" 
else 
    response = $(redis-server /usr/local/etc/redis.conf) 
    ECHO "$response" 
fi 

如果Redis的運行我得到預期的redis response:PONG 但是,如果Redis未運行,我會得到Could not connect to Redis at 127.0.0.1:6379: Connection refused,並且Redis無法啓動。

我認爲發生了什麼是「無法連接」的消息被視爲未捕獲的異常,因此終止腳本。

是否有辦法抓住並完成運行腳本?這甚至是問題嗎?

回答

1

以下更新腳本不正是我希望它:

ping=$(redis-cli ping) 
if [ "$ping" = PONG ] 
then 
    ECHO "Redis response: $ping" 
else 
    ECHO starting Redis 
    redis-server /usr/local/etc/redis.conf 
fi 
ECHO "$(redis-cli ping)" 

由於亞諾什正確地在他的第二個評論指出,else語句被執行。

把我扔掉的是ECHO $response未在原始腳本中打印。我在猜測上一行是Redis,它是一個異步操作。因此,在Redis運行之前調用了ECHO $response

我還被Redis不運行時打印的ping響應打印出來。腳本邏輯規定,只有在$ping = PONG的情況下才能打印迴應,並且應該預先加上「Redis Response:」。我仍然不確定它爲什麼會打印「無法連接」的信息,但是無論如何...

再次感謝Janos