次の規則に従って、マウントポイントの下にあるstdout
/というファイルを削除する方法は?stderr
/data/sdf
使用可能なディスク容量(上記
/dev/sdf
)が100 G未満です。stdout
または、ファイルstderr
サイズが2Gより大きい。/data/sdf/hadoop/yarn/log/application_1575355124522_0458/container_e245_1575355124522_0458_01_000002/stdout /data/sdf/hadoop/yarn/log/application_1575355124522_0458/container_e245_1575355124522_0458_03_000002/stdout /data/sdf/hadoop/yarn/log/application_1515153382036_0001/container_e13_1515153382036_0001_02_000003/stdout
~からdf -h
/dev/sdf 80G 76G 3.7G 82% /data/sdb
find
サイズに応じてファイルを削除するために、次の呼び出しを考えました。
find /grid/sdf -type f \( -name "stdout" -o -name "stderr" \) -size +2000M -delete
しかし、利用可能なディスク容量を確認する方法がわかりません。
答え1
GNU を仮定するとdf
、たとえば、次のように空きディスク領域の条件を追加できます。
[[ $(df --output=avail -B1 /grid/sdf | tail -n 1) -lt 100*1024*1024*1024 ]] && \
find /grid/sdf -type f \( -name "stdout" -o -name "stderr" \) -size +2000M -delete
必要に応じて調整できます(空き容量が100GiB未満の場合はファイルを削除するなど)。
while [[ $(df --output=avail -B1 /grid/sdf | tail -n 1) -lt 100*1024*1024*1024 ]]; do
find /grid/sdf -type f \( -name "stdout" -o -name "stderr" \) -size +2000M -delete -quit
done
(該当ファイルを削除しても十分な空き容量が確保されない場合は無限に繰り返されます。)
他にも以下をdf
使用できます。 (必須ではありません)findmnt
df --output=avail -B1 /grid/sdf | tail -n 1
findmnt -nbo AVAIL /grid/sdf
tail