[英]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.