bash +はディスクスペース使用量を監視し、スペース使用量がしきい値に達するとスクリプトを実行します。

bash +はディスクスペース使用量を監視し、スペース使用量がしきい値に達するとスクリプトを実行します。

私たちはパーティションの使用済みスペースを追跡したいと思います/var/hadoop/hdfs。使用されているスペースが多い場合は、50%スクリプトを実行してください。do_action.bash最後に、このコマンドはcrontabにあり、1時間ごとに実行する必要があります。

hdfsパーティションの例

df -Ph | grep 'hdfs'
/dev/sdc                     20G  1.7G   18G   9% /var/hadoop/hdfs

これまでに行ったことは、"run the script do_action.bash"しきい値が次より大きい場合は、次の構文を印刷することです。50%使用される、

df -Ph | grep 'hdfs' | sed s/%//g | awk '{ if($5 > 50) print "run the scriot do_action.bash"}'

しかし、スクリプトの実行を追加する方法 -do_action.bash

私たちは努力する

df -Ph | grep 'hdfs' | sed s/%//g | awk '{ if($5 > 50) print "run the scriot do_action.bash"}' && bash /opt/do_action.bash

ただし、いずれにせよスクリプトが- /opt/do_action.bash実行されるため、上記の内容は正しくありません。

ベストアンサー1

実行すると、そのディレクトリの出力をdf /path/to/directory取得できます。dfたとえば、私のシステムでは次のようになります。

$ df -Ph /home/terdon
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1p6  669G  186G  450G  30% /home

したがって、そうする必要はありませんgrep hdfs。直接インポートしてから2行目(NR==2awk)を見ると、ヘッダーをスキップできます。これを念頭に置いてawk終了ステータスを設定しexit()、それを通常のシェルで使用して&&スクリプトを実行できます。このような:

df -Ph /var/hadoop/hdfs | tr -d '%' | 
    awk 'NR==2{ exit $5>50 ? 0 : 1}' && /opt/do_action.bash

またはより短く:

df -Ph /var/hadoop/hdfs | awk 'NR==2{exit ((0+$5) <= 50)}' && /opt/do_action.bash

&&「前のコマンドが成功した場合にのみ、次のコマンドを実行します」を意味します。より大きい場合は、exit $5>50 ? 0 : 1awkコマンドの終了コードを0(成功)に設定するため、スクリプトは次の場合にのみ実行されます。$550$5>50

以下は、もっと冗長ですが、理解しやすい形式で書かれた最初のawkスクリプトです。

awk '{ 
        if(NR==2){ 
            if($5>50){
              exitStatus=0
            }
            else{
               exitStatus=1
            }
            exit(exitStatus)
        }
    }'

おすすめ記事