簡體   English   中英

Linux bash腳本表現得很奇怪

[英]Linux bash script acting weird

我有一個簡單的bash腳本,可以監視mysql是up還是down。 如果它關閉,我想也阻止HAProxy運行。 下面是我簡單的bash腳本:

#!/bin/bash

nc -z 127.0.0.1 3306
rt_val=$?
msg=$(sudo service haproxy stop);
if [ $rt_val != 0 ]; then
    eval $msg
    exit 3
else
    exit 0
fi

MySQL運行或不運行部分工作正常。 停止HAProxy部分似乎有問題。 發生的事情是當mysql停止時HAProxy停止。 但是當我啟動MySQL和HAProxy時,即使MySQL啟動並運行,腳本似乎也會繼續停止HAProxy。

在您的腳本中,您無條件地執行sudo service haproxy stop並使用命令替換將輸出存儲在$msg

您可以將命令存儲在變量中,但這被認為是非常糟糕的做法(請參閱Bash FAQ 050 )。 相反,嘗試將命令分配給函數並稍后調用它( function關鍵字是可選的和Bash特定的,為了便於攜帶而留下它):

#!/bin/bash

function stopcmd() { sudo service haproxy stop ; } # semicolon needed if on single line

nc -z 127.0.0.1 3306
rt_val=$?

if [ $rt_val != 0 ]; then
    stopcmd
    exit 3
else
    exit 0
fi

此外,在這種簡單的情況下,功能和測試( [ ... ] )都不是必需的。 您的腳本可以寫成:

#!/bin/bash 

if nc -z 127.0.0.1 3306
then
    exit 0
else
    sudo service haproxy stop
    exit 3
fi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM