LinuxサーバでSyslogサーバなどの大容量ファイルを扱うような場合、運用している間にディスクが圧迫されいつのまにかログが保存できていなかった、という経験があります。
こういった場合は自動で古いファイルを他のパーティションに待避して容量を開けるといった処理が自動でできればよいのですが、そんな神業はかなり難しいのでせめてある一定の容量を超えれば警告メールを発するというのを考えました。
やはり同様の考えをもった方は他にもおられるようで以下のスクリプトが公開されていました。
#!/bin/sh DVAL=`/bin/df / | /usr/bin/tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'` if [ $DVAL -gt 80 ]; then echo "Disk usage alert: $DVAL %" | /usr/bin/mail -s "[WARNING][`hostname`] disk space alert" YOUR_EMAIL_ADDRESS fi |
上記の80という数字がしきい値となっており、/パーティションが80%を超えた場合に発動します。これは任意に変更可能なので90%以上にしたい場合は90に変えればよいということになります。またメールの通知先はYOUR_EMAIL_ADDRESSに任意のメールアドレスを入力してください。
上記のスクリプトをdisk_check.shという名前で保存し/root配下に保存しました。これに実行権限を与え、cronに登録すれば完了です。
# mv disk_check.sh /root # chmod 755 disk_check.sh # vi /etc/crontab <省略> ※下記は毎朝8時にチェックする 00 08 * * * root /root/disk_check.sh # systemctl restart crond.service |
参考URL: https://pc.casey.jp/archives/153903095
AlmaLinux9からはmailコマンドがs-nailというパッケージに置き換わり、mailコマンドのお作法も少し変わっております。mailコマンドで渡すパラメータが少し増えております。
# dnf install s-nail # vi disk_check #!/bin/sh DVAL=`/bin/df / | /usr/bin/tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'` if [ $DVAL -gt 80 ]; then echo "Disk usage alert: $DVAL %" | /bin/mail -s "[WARNING][`hostname`] disk space alert" \ -S mta=smtp://XX.XX.XX.XX:25 -S smtp-auth=none -S v15-compat=yes YOUR_EMAIL_ADDRESS fi |
上ではローカルのmailコマンドを叩くのではく、SMTPサーバを指定して送信する方法となります。この場合、smtpサーバのipはもちろんですが、smtp-authやv15-compatの指定も必須となります。
このスクリプトはどのパーティションかまではメールに記載されず、予め設定したパーティションがしきい値を超えるとアラートが来る、というもので個人的にはこれで必要十分なのですが、しきい値を超えたパーティションまでメールに記載するというのを書いている人もおられました。
参考URL: http://magazine.re-web.org/disk-limit-check/
皆さん、各自の運用でいろいろと工夫されておられますね。私も見習いたいです。