長時間起動のプロセスをkillするスクリプト

例えば30分以上経っても処理が終わらないhttpdプロセスをkillする方法。親プロセスはroot権限でしょうから、grep -v rootで除外しておきます。このシェルスクリプトをrootで定期実行すればok

for i in `ps aux | grep httpd | grep -v root | gawk '{print $2 "_" $10}' | sed 's/://'`
do
        PROCCESSNUM=`echo $i | cut -f1 -d'_'`;
        TIMENUM=`echo $i | cut -f2 -d'_'`;

        if [ $TIMENUM -gt 30 ]; then
                kill $PROCCESSNUM;
                echo "kill $PROCCESSNUM at "`date`;
        fi
done

最初のfor文で 12345_023のようにプロセス番号_処理時間という文字列を取得(プロセス番号 処理時間というように空白区切りにするとfor文が空白で分割して回してしまうのであえてアンダーバーで区切りました)
次にcutコマンドでアンダーバーの左側と右側を取得。最後に継続時間が30分より大きいかチェックして、trueならkillコマンド発動という流れ。

HPが運営しているオンラインプリントサービスが安すぎる!(1枚9円)

HP(ヒューレッドパッカード)が運営しているオンラインプリントサービスsnapfishを最近使ってるのですが、安くてすごく便利。通常は1枚12円なのですが、最初に250枚のプリント権利を一括で払えば、後は1枚9円でプリントできます。送料は1回150円(1回買うとクーポンで更に安くなりました)。


http://www.snapfish.jp


最近、子供がうまれたので写真をたくさん撮るようになったんだけど、それを自分で3部印刷して両親に送るまでを考えると疲れてしまう。このサービスを使えば、写真をアップロードして選択し、事前に登録しておいた両親の住所を選択するだけで簡単に写真を送れる。しかも1枚の単価が安いので、この写真は送ろうかどうしようか、という場合も気軽に送っちゃえばいいかと思えます(1枚が高いと写真を厳選し始めてしまい、最後にはそれに疲れて使わなくなってしまうんですよね、自分は)。

クレジットカードがあればすぐに送付まで手続きが完了します。無くてもコンビニ払いが出来るので安心。

英語を2ヶ月でなんとかしないといけなくなりました

今年のCakefest2010@シカゴ(2010/9/4開催予定)に、発表者として応募したら見事採択されました、しかも1時間の発表(英吾で)。
http://cakefest.org/schedule#conference

発表内容は、Cakephp + MongoDBなので1時間ぐらいは話せるような気がするのですが、問題は質疑応答の箇所。というか発表中に容赦なく質問してくるので、それに耐えながら発表をしていかないといけない。

今まで、なんちゃって英語でビールの力を借りながら乗り切ってきた自分にとって、最大の試練かもしれない。TOEICはほとんど受けたことが無いけど、たぶん日本人の平均点ぐらいだと思う。
あえてその試練を課すことによって、停滞している自分の英語能力をアップさせることにする。逃げられない目標がないとなかなか本気だせない自分が悲しい。

ということで、あと2ヶ月でなんとかするプランを練りました。これを地道に実践してどこまでいけるか、壮大な実験です。

文法、ボキャブラリ能力が低いのでそれを重点的に、あとは実践を積んでいく方式です。英語記事を読む、その感想を英語で書くという作業をスピーディーに出来るようになれば、会話もなんとかなりそうな気がします。とりあえず必要なのは技術英語なので、IT系のニュースを重点的に見ることにします(懇親会やランチでの話題は政治や文化の違いなどが多けど・・・)

  • Duo3をやりきる(7月中)
  • Forestで文法復習(7月中)
  • Skytalkで英会話の実践練習(毎日)
  • 英語の記事を読んで、その感想を英語でブログに書く(毎日)
  • 空いた時間はCNNã‚„Podcastなどを聞く(毎日)


下記も参考になる情報がたくさんあるのでオススメです。
インターネット時代のお手軽英語勉強術


余談
サマーウォーズを英語で語り合っているビデオとか見れます。20分目ぐらいからサマーウォーズトークが始まって面白い。
http://revision3.com/animetv/summerwars

Webサーバのエラー画面やhttpヘッダのサーバ情報を隠す

Apacheの設定で、例えば下記のようなHTTPヘッダー情報

Server: Apache/2.2.0 (Unix) mod_ssl/2.2.0 OpenSSL/0.9.8 PHP/5.2.0

出さないほうが良いサーバ情報を隠す設定
CentOSをベースにして書いています。


httpd.confの下記の行のコメントをはずす

Include conf/extra/httpd-default.conf


extra/httpd-default.confを編集
これでApacheのバージョンやOpenSSLのバージョンが表示されなくなる

Timeout 300
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout 5
UseCanonicalName Off
AccessFileName .htaccess

#下記のように変更
ServerTokens Prod
ServerSignature Off

HostnameLookups Off


php.iniを編集。これでphpのバージョンなどが表示されなくなる

expose_php = Off

Ubuntu 9.04でFirewall設定

クライアント版のubuntuは、基本的にFirewallが全開で空いてます。なのでローカルで開発してる時に、不用意にApacheとかMySQLとか上げてると、同一ネットワーク内のマシンから丸見えになってしまいます。
Ubuntuにはufwとかいうfirewall設定ツールがあるみたいですが、centosでも使ってるiptableを利用することにしました。
guiでufw設定ができるgufwというツールもあるみたいなので、そっちを使えばもっと簡単だったかも。
http://mycoco.dyndns.org/hmsvr09.php

とりあえず、/root/iptables.shを作って下記内容を記載

#!/bin/sh

# 全てのルールを削除
/sbin/iptables -F
# 全てのユーザ定義チェインを削除
/sbin/iptables -X

# 基本的には外部からのパケットの通過を拒否
/sbin/iptables -P INPUT DROP
# 基本的には外部へのパケットの通過を許可
/sbin/iptables -P OUTPUT ACCEPT
# 基本的には他のインターフェイスへ再送信を拒否
/sbin/iptables -P FORWARD DROP


# 内部から行ったアクセスに対する外部からの返答アクセスを許可
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


#/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT

このスクリプトをrootで実行すればpacketがフィルターできます。
apacheを外部から確認したい場合や、ssh接続したい場合は、最後の2行の#をはずし、再度スクリプトを実行します。

あとは、毎回ブート時に設定されるように、/etc/rc.localに
/root/iptables.sh
を追加して設定されるようにします。

さて、ここまでで安心してちゃダメです。実はipv6がデフォルトで有効になっているので、こっちも対応が必要です。ipv6の機能をオフにしようと思いましたが、色々やってみてダメだったので、たぶんカーネル再構築が必要です。面倒なので、ip6tablesコマンドを使って全ての入出力パケットをフィルターするようにしました。
/root/ip6tables.shを作り、下記内容を記載します。

#!/bin/sh

# 全てのルールを削除
/sbin/ip6tables -F
# 全てのユーザ定義チェインを削除
/sbin/ip6tables -X

# 基本的には外部からのパケットの通過を拒否
/sbin/ip6tables -P INPUT DROP
# 基本的には外部へのパケットの通過を拒否
/sbin/ip6tables -P OUTPUT DROP
# 基本的には他のインターフェイスへ再送信を拒否
/sbin/ip6tables -P FORWARD DROP

# lo( ループバック)からのINPUTを拒否
/sbin/ip6tables -A INPUT -i lo -j DROP

これも同じように、/etc/rc.localに
/root/ip6tables.sh
の1行を記載してブート時にフィルターされるようにします。

これで安心!

Ubuntu9.04でemobileを使う

emobile D02HWをubuntuで使う方法が色々あるみたいですが、
http://d.hatena.ne.jp/hiro_nemu/20090320/1237538939
なんか自分の環境ではうまく動かなかったので、コマンドからPPP接続させることにしました。

まず、/etc/ppp/peers/emobile という新規ファイルを作成して下記内容を記載します

user "em@em"
connect "/usr/sbin/chat -v -f /etc/chatscripts/pap -T *99***1#"
/dev/ttyUSB0
115200

noipdefault
usepeerdns
defaultroute
persist
noauth

その後、pon emobileで接続、poff emobileで切断できます。
使いやすいように下記のスクリプト(emobile.sh)を作りました

#!/bin/sh

case $1 in
        start)
                pon emobile
                echo "start emobile\n"
        ;;

        stop)
                poff emobile
                echo "stop emobile\n"
        ;;

        *)
                echo "emobile.sh start or stop\n"
                exit
        ;;

esac

使う時はコマンドから
emobile.sh start
で開始し、終了するときは
emobile.sh stop
とします。

Netbook(EeePC S101)にUbuntu9.04 Netbook Remixをインストール

Ubuntuデビューしました。いろいろとカスタマイズしてこんな画面構成にしました。ネットブックだと縦の画面サイズが小さいので、ツールバーを横にもってきた。

インストールは下記を参考に簡単にできました。
http://eeepc.cocolog-nifty.com/blog/2009/04/netbook-remix-9.html


WindowsのXamppを使った開発はお手軽でいいんですが、そこで開発したコードをLinuxサーバに持っていくとたまに動かないことがあったりしたので、この際、開発は全てLinuxベースにしようと決意。Desktop開発機にはVmwareでCentOS入れて、そこで開発。ノートはUbuntu入れてそこで開発という構成にしました。

最初はSDHCカードにUbuntuを入れたのですが、プチフリーズがそれなりにあって、ブラウジングが不快だったので結局SSDの中に入れました。SSDの中だとかなり快適に動作してます。でもSDHCで試してUbuntuかなり使えると判断できたので良かった。


ノートにlinuxを入れると、無線LANの設定とか面倒かなと思ってましたが、Ubuntuはそんなのおかまいなしに、インストール直後から無線LANとかBluetoothとか簡単に設定できてしまった、すごすぎる。日本語入力もデフォルトで半角/全角キーに割り当てられてて、Windowsと操作感が変わらなくて、すんなりWindows離れできそうw

SSDにインストールするときに、もともとWindowsが入っていて、これを消すのもなぁと思ったので、動的にパーティションのサイズが変更できるgpartedを使ってやりました。gpartedはSDHCカードにいれたUbuntuから実行。簡単にwindowsのパーティションサイズが変更できて、何も問題なかったのでお勧め。
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/824gparted2ntfs.html

ただ、NTFSフォーマットのリサイズは、別途ntfsprogsをインストールする必要がありますが、gpartedもntfsprogsも簡単にUbuntuのパッケージマネージャからGUIでインストールできたのでお手軽。


Ubuntuのパッケージマネージャはお手軽にいろいろとインストールできるので便利。screen, git, svn, apache2, mysql-server, php5, xchat, vim-fullなんかがサクサク入ってすぐに環境設定ができます。

これからしばらくはUbuntuとCentOSでやっていきたいと思います。