ロード平均が高い場合、Apacheを自動的に再起動する

ロード平均が高い場合、Apacheを自動的に再起動する

私のサーバーは、高い負荷平均に達すると常にシャットダウンされます。 Apache、MySQLを最適化しました。しかし、交通量が多いところでは止められません。それで、負荷平均を制御するためにシェルを書いてみました。

#!/bin/bash
check=`uptime | sed 's/\./ /' | awk '{print $10}'`
if[$check -gt 5]
then
  /usr/bin/systemctl restart httpd.service
fi

ただし、スクリプトを許すとエラーが報告されます。

/var/www/html/load_average.sh: line 3: if[0.98, -gt 5]: command not found
/var/www/html/load_average.sh: line 4: syntax error near unexpected token `then'
/var/www/html/load_average.sh: line 4: `then'

もう一つ質問、cronjobを使用して10秒ごとにスクリプトを実行する方法は?

誰とでも共有できる別の作業コード:

#!/bin/bash
check=$(uptime | tr -d ',' | awk '{print $10}')
if [[ $check > 5 ]]; then
  /usr/bin/systemctl restart httpd.service
fi

cronjobセクションで

* * * * * /var/www/html/load_average.sh >/dev/null 2>&1
* * * * * sleep 10; /var/www/html/load_average.sh >/dev/null 2>&1
* * * * * sleep 20; /var/www/html/load_average.sh >/dev/null 2>&1
* * * * * sleep 30; /var/www/html/load_average.sh >/dev/null 2>&1
* * * * * sleep 40; /var/www/html/load_average.sh >/dev/null 2>&1
* * * * * sleep 50; /var/www/html/load_average.sh >/dev/null 2>&1

ベストアンサー1

次のように、スペースを使用してデータと角括弧を区切る必要があります。

for I in 0 1 2 3 4 5; do
    check=$(uptime | tr -d ',.' | awk '{print $10}')
    if [ "$check" -gt 5 ]; then
        /usr/bin/systemctl restart httpd.service
    fi
    sleep 10
done

UNIXでは[シェルコマンド。シェルが$check変数をその値に置き換えると、結果コマンドを見つけようとするとエラーが発生します。また、$check変数を空の文字列やスペースで置き換えたように引用することをお勧めします。これにより構文エラーが発生します。

crontab の問題に関連して、次を実行します。クローンタップ-eファイルに次の項目を追加します。

* * * * * /PATH/TO/YOUR/SCRIPT

Cronjobの最小チェック実行時間は1分なので、ループを使用して10秒ごとに6回確認を繰り返す必要があります。

おすすめ記事