-2

ディスク使用量が70%に達したときに管理者に警告するシェルスクリプトを書いてみました。このスクリプトをPythonで書きたい

#!/bin/bash
ADMIN="admin@myaccount.com"
INFORM=70

df -H  | grep -vE ‘^Filesystem|tmpfs|cdrom’ | awk ‘{ print $5 ” ” $6 }’ | while read   output;
do
use=$(echo $output | awk ‘{ print $1}’ | cut -d’%’ -f1  )
partition=$(echo $output | awk ‘{ print $2 }’ )
if [ $use -ge $INFORM ]; then
echo “Running out of space \”$partition ($use%)\” on $(hostname) as on $(date)” |
mail -s “DISK SPACE ALERT: $(hostname)” $ADMIN
fi
done
4

1 に答える 1

2

df最も簡単な(理解できる)アプローチは、外部プロセスでコマンドを実行し、返された出力から詳細を抽出することです。

Pythonでシェルコマンドを実行するには、subprocessmoduleを使用する必要があります。モジュールを使用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
于 2013-02-11T07:25:49.060 に答える