df
最も簡単な(理解できる)アプローチは、外部プロセスでコマンドを実行し、返された出力から詳細を抽出することです。
Pythonでシェルコマンドを実行するには、subprocess
moduleを使用する必要があります。モジュールを使用smtplib
して、管理者にメールを送信できます。
監視する必要のないファイルシステムをフィルタリングし、ファイルシステムと使用済みの値を引き出すために文字列操作を行い、使用量がしきい値を超えたときに出力する小さなスクリプトを作成しました。
#!/bin/python
import subprocess
import datetime
IGNORE_FILESYSTEMS = ('Filesystem', 'tmpfs', 'cdrom', 'none')
LIMIT = 70
def main():
df = subprocess.Popen(['df', '-H'], stdout=subprocess.PIPE)
output = df.stdout.readlines()
for line in output:
parts = line.split()
filesystem = parts[0]
if filesystem not in IGNORE_FILESYSTEMS:
usage = int(parts[4][:-1]) # Strips out the % from 'Use%'
if usage > LIMIT:
# Use smtplib sendmail to send an email to the admin.
print 'Running out of space %s (%s%%) on %s"' % (
filesystem, usage, datetime.datetime.now())
if __name__ == '__main__':
main()
実行されたスクリプトの出力は次のようになります。
Running out of space /dev/mapper/arka-root (72%) on 2013-02-11 02:11:27.682936
Running out of space /dev/sda1 (78%) on 2013-02-11 02:11:27.683074
Running out of space /dev/mapper/arka-usr+local (81%) on 2013-02-11 02:11