Home > Linux

Linux Archive

[Python]ハードディスクの温度を定期的にTwitterにポストする

自宅サーバ(CentOS5.3)は極端に熱のこもる場所に設置してあるわけではないので、廃熱に関してはそこそこ大丈夫だと思っているのだけど、それでもハードディスクとかの温度は心配。そこで会社にいても状況を把握出来るように、4時間おきにハードディスクの温度をTwtterにポストしている。以下備忘録的にまとめてみた。

hddtempのインストール

まずはハードディスクの温度を計測する為にhddtempをインストールする。CentOSの場合はyumでインストール可能。

# yum -y install hddtemp

使用する時は、hddtemp disk名をタイプして実行する

# hddtemp /dev/sda
/dev/sda: WDC WD10EADS-00L5B1: 39°C

hddtempの値を取得してTwitterにポストする

以下ソースコード(Pythonなのに全くインデントしてない><)

#!/usr/bin/env python
# coding: utf-8

import sys
import twitter
from datetime import *

USERNAME = "TWITTER_ACCOUNT"
PASSWORD = "ACCOUNT_PASSWORD"

DATETIME = datetime.now()
TIME_STR = DATETIME.strftime("%I:%M %p")
api = twitter.Api(USERNAME, PASSWORD)

t = sys.stdin.readline()
info = t.rstrip() + " " + "at" + " " +TIME_STR

post = u"%s" % (info)
api.PostUpdate(post)
# print post

Twitterへポストするモジュールはpython-twitterを使用。
注意した点は2つあって、1つは受け取った標準出力に改行がついてきて、そのままではTwitterにうまくポスト出来ないのでrstripしていること。もうひとつは、ポストする内容にその時刻を追加したこと(取得した温度だけをポストする場合、温度が毎回同じだとポストする内容が一緒になってしまい、Twiiter仕様上無効ポストになってしまう)

シェルスクリプトの作成

#!/bin/sh
export LANG=ja_JP.utf-8
/usr/sbin/hddtemp /dev/sda | /usr/local/bin/python /usr/local/bin/hdd_info.py
exit

ここでは、/dev/sdaの温度を取得し、先ほどのスクリプト(hdd_info.py)へパイプで繋いでいる。ディスク名は環境によって違うと思うので置き換えて下さい。最初どうしても°CがTwitterにポストされず困っていたのだけど、export LANG=ja_JP.utf-8を記述することでポスト出来るようになった(katsu2000xさんthanks!)
このシェルスクリプトをCronで定時実行させるとこのようになる。Twitterアカウントは本人のアカウントを使用するとTLを汚すような気がして、それ用のアカウントを作った。

20090904_01

[2009年9月13日追記]
twitterでフォローしているmagicalhatさんが、perlでさくっと書いてくれてトラバ貰いました。勉強になります!
[追記ここまで]

CORESERVERのShell

このblogはCORESERVERで動かしているのですが、一番最初にsshログインして操作しようとした時、


~> ls
-rbash: /bin/ls: restricted: cannot specify `/' in command names

というメッセージが出て訳がわからず焦りました。とりあえずメッセージ内容をgoogle先生に聞いたところ、CORESERVERのShellはデフォルトでrbashという制限付きbashとなっているとのこと。従ってchshコマンドを使用し、デフォルトShellをbashに変更しました。


~> chsh
Changing login shell for hogehoge.
Password:
Enter the new value, or press return for the default.
        Login Shell [/bin/rbash]: /bin/bash
Shell changed.

これで普通に ls とか cd コマンドが使用出来るようになりました。ふう〜。

kickstartを使ったインストールの自動化

さて、前回の続きですが、RedHat系Linuxではkickstartという仕組みを利用してOSインストールの自動化を行うことが出来ます。kickstartの詳しい内容につきましてはこちらにある公式ドキュメントをご参照願います。下記参考サイトにも挙げてあります。

参考にしたサイト

前回同様大変参考になりました。

kickstartファイルの作り方

kickstartファイルは公式マニュアルを参照して作成したり、Web上にあるなんらかのサンプルを利用することも出来ますが、今回はPXEサーバにあるanaconda-ks.cfgを流用します。
RedHat系Linuxをインストールすると /root にanaconda-ks.cfg というファイルが作成されます。前回使用したPXEサーバのanaconda-ks.cfgは次のようになっています。


# Kickstart file automatically generated by anaconda.

install
cdrom
lang ja_JP.UTF-8
keyboard jp106
network --device eth0 --bootproto static --ip 192.168.11.5 --netmask 255.255.255.0 --gateway 192.168.11.1 --nameserver 192.168.11.1 --hostname hoge.centos.com
rootpw --iscrypted *****************************
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --enforcing
timezone Asia/Tokyo
bootloader --location=mbr --driveorder=sda
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --all --drives=sda
#part /boot --fstype ext3 --size=100 --ondisk=sda
#part pv.2 --size=0 --grow --ondisk=sda
#volgroup VolGroup00 --pesize=32768 pv.2
#logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
#logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=512 --grow --maxsize=1024

%packages
@japanese-support
@core
@base
@printing
@development-tools
device-mapper-multipath
imake
-sysreport

anaconda-ks.cfgの修正

まず、anaconda-ks.cfgを /var/ftp にコピーし、kickstart-centos.cfgという名前に変更します。所有者、パーミッションは環境に合わせ変更して下さい。


# cp /root/anaconda-ks.cfg /var/ftp/kickstart-centos.cfg

次にkickstart-centos.cfgを今回セッティングするサーバ用に数ヶ所修正します。私は主に次の3箇所を修正します。
まずインストールメディアの指定を変更します。2行目の「cdrom」を下記のように変更します。


url --url ftp://192.168.11.5//centos

今回は前回のPXEサーバのネットワーク環境をそのまま流用しますので、FTPでインストールメディアを提供します。

次に5行目のネットワークの設定を行います。これはセッティングするサーバに与えるIPアドレス等、各々の環境に合わせて設定します。
次に6行目のrootパスワード(rootpw)を設定します。rootpwで設定するパスワードは平文でも記述出来ますが、暗号化したパスワードを記述することも可能です。暗号化したパスワードはiscryptedオプションを付与することによって有効になります。
パスワードの暗号化ですが、anaconda-ks.cfgを参照しているサーバと同じパスワードを使用するならば、同じもので構いませんが、違うパスワードを使用したい場合はパスワードを暗号化する必要があります。パスワードの作成はこちらのサイトを参考にさせて頂きました。


# openssl passwd -1
Password:
Verifying - Password:
$1$V.6Zs850$zNvg6orrkhnJ00Nmt5xQd0

“$1$”で始まる文字列が暗号化されたパスワードになります。作成されたパスワードをコピー・ペーストして下さい。

kickstartファイルの設置

このようにして作成したkickstartファイルは、前回使用した /tftpboot/pxelinux.cfg/defaultファイルに指定します。前回作成したdefaultファイルを下記の様に修正します。



default centos

label centos
kernel vmlinuz
append load initrd=initrd.img ksdevice=eth0 ks=ftp://192.168.11.5/kickstart-centos.cfg devfs=nomount

ここまで出来れば、あとは前回同様にPXEサーバの必要なサービスの起動、DVDイメージのマウントを行い、クライアントPCを起動させて下さい。うまくいけばインストールがスタートし、RESTARTのメッセージが表示されるところまで自動的に進むと思います。
また、kickstartでは、%postという指定でインストール後にユーザー追加などのコマンドを記述することが出来ます。今回は取り急ぎセットアップしただけですが、時間があればもう少し調べてみたいと思います。

CentOSをネットワークインストールする

ある事情により、自宅のiTunesサーバ(兼ファイルサーバ)として使用していたノートPCを人に譲ることになり、他のノートPCを代替サーバに仕立てようとCentOSのインストールを試みたのですが、DVD-ROMドライブが壊れているようでインストールが出来ない〜><。
そこで以前より気になっていたPXEを利用したネットワークインストールに挑戦してみました。

全文を読む

ホーム > Linux

Search
Feeds
Meta

Return to page top