2008/12/24

daemontoolsをインストールしたよ

仕事で管理してるサーバの一つでcronで定期的に実行してる処理があるんだけど、時間がやたらとかかる。平気で4時間とかかかる。
で、遅いだけならまだしも、前の処理が終わってないうちに次の処理が平行で走ると、8時間とか12時間とかどんどん時間がかかる。load avarageが10とかヨユーで超える。なんだよそれー!
でも、俺が作ったやつじゃないからそのスクリプト自体は触れない。というか俺のせいにされたくないから触りたくない。作った人に頼んどくれ。
で、俺はというとシステム全体のパフォーマンスが落ちないように、平行して処理されないようにしますねということで、daemontoolsをインストールしたよ。

えっと、サーバはCentOS5なので、パッケージはやっぱyumでインストールでしょ?と思ったんだけど、パッケージがねーよ!えぇーマジで。そりゃねーよ。

あきらめきれない。。。。あ、SRPMがあった。
[ ~]# wget wget http://www.qmailtoaster.org/download/develop/daemontools-toaster-0.76-1.3.3.src.rpm
[ ~]# sudo rpmbuild --rebuild daemontools-toaster-0.76-1.3.3.src.rpm
[ ~]# sudo rpm -Uvh /usr/src/redhat/RPMS/x86_64/daemontools-toaster-0.76-1.3.3.x86_64.rpm

よし、じゃあcronに設定しよう
[ ~]# crontab -e
01 * * * * /usr/bin/setlock -nx /tmp/script.lock /foo/cron/script.sh

これで /tmp/script.lock がロックできるか、なければ新しく作成して script.sh を実行するし、ロックできなければあきらめるようになるよ。

2008/09/06

DHCPサーバ機能設定@光プレミアムマンションタイプ

CTU設定で、DHCPサーバ機能設定を「しない」にできないんですけど。
ねぇねぇなんで?ねぇなんで?すげー不満。
 

Error: Can't locate Geo/IPfree.pm in @INC

ある日、Awstatsを見て気がついた。俺のサイト、だーれもこねー。
そりゃーね、もともと間違ってきた人くらいしか訪問してなかったけど、ここんとこ0人ですよ!0人。そんなバナナ!
よし、こうなりゃ悲しーけど自分で水増ししてやる!カチカチカチ・・・・
あれれ?増えない。アクセスログにはアクセスあるのに、、、ってよく見たらログの集計に失敗してるんじゃん。

えーとなになに?
Error: Can't locate Geo/IPfree.pm in @INC
パスが見つからないのね?

なんか、Geo/IPfree.pm のパスって変わったのかな?わかんねーや。
今あるのは、ここ
[root@ ~]# locate IPfree.pm
/usr/lib/perl5/site_perl/5.8.8/Geo/IPfree.pm

で、@INCの中身はコレ
[root@ ~]# perl -le 'print for @INC'
/usr/lib/perl5/5.10.0/i386-linux-thread-multi
/usr/lib/perl5/5.10.0
/usr/local/lib/perl5/site_perl/5.10.0/i386-linux-thread-multi
/usr/local/lib/perl5/site_perl/5.10.0
/usr/lib/perl5/vendor_perl/5.10.0/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.10.0
/usr/lib/perl5/vendor_perl
/usr/lib/perl5/site_perl/5.10.0

あはっ☆、そりゃーみつからないよネ♪ Perlのバージョンが変わってるや。

んで、どうやって追加してやりゃーいいんだろ?わかんねーや。
っていうかめんどくさくなってきた。

とりあえず、ここに書いておこう。誰か正解を教えてくれないかなぁ。
[root@ ~]# vi /usr/share/awstats/wwwroot/cgi-bin/awstats.pl
require 5.005;
#追加
BEGIN {
push(@INC, '/usr/lib/perl5/site_perl/5.8.8/');
}

2008/07/02

MailmanでUnicodeEncodeError

Mailmanってとってもまじめな印象があります。(ただの偏見)
まじめすぎて融通きかないです。(ただの偏見)

機種依存記号がちょっとでもあると、通してくれないです。
ちょっとぐらいなら「もぅ~、しょうがないな~」とかいって通して欲しいですのでいじりました。

/usr/lib/mailman/pythonlib/email/Charset.py

282c282,283
< return unicode(s, self.input_codec).encode(self.output_codec)
---
> #return unicode(s, self.input_codec).encode(self.output_codec)
> return unicode(s, self.input_codec, 'replace').encode(self.output_codec, 'replace')

2008/01/10

406 Not Acceptable on application/x-httpd-php

application/x-httpd-php に、phpだとかhtmlを結び付けてると、Accept */* を送ってこないクライアントに対してページがひょーじできない(SoftBank 3GCとかね)。ほらほーだ。

と、言うわけで Apache2.0にしたことだし、こんな感じに変更しますた。

Options +MultiViews
MultiViewsMatch Handlers

<IfModule mod_php5.c>
AddType text/html .php
AddHandler php5-script .php .html
</IfModule>

2007/12/27

FedoraのRPMで入れた AWStats 6.6 はケータイがロボットだってさ

こないだ作った Fedora6のwebサーバで、どれいっちょアクセス解析でもしようかと、AWStatsを入れたワケですよ。
でもね、一向にアクセスがカウントされないですよ。
でもね、「閲覧に含まれないアクセス」がガンガン増えてくですよ。
おぃおぃ、このサーバにはロボットかワームしか来てくれないのかい?ってちょっと悲しくなってアクセスログ見てみたら、そんなことねーじゃん!ちゃんと来てくれてるよケータイ君(俺のだけどorz)
ハハーン、どうやらAWStatsが勘違いしてるな?、というワケで対処してみる。

えっと、まず、ロボットの設定を見てみると、ありましたね、DoCoMoとauが。
これじゃあ、勘違いするワケですよ。なので、全部コメントアウトしちゃいやしょう。
/usr/share/awstats/lib/robots.pm
736c736
< #'docomo',
---
> ‘docomo’,
937c937
< #'up\.browser',
---
> ‘up\.browser’,
1374c1374
< #'docomo','DoCoMo‘,
---
> ‘docomo’,’DoCoMo‘,
1574c1574
< #'up\.browser','UP.Browser‘,
--- > ‘up\.browser’,’UP.Browser‘,


調子に乗った俺は、次もイッちゃうよ?
どうやら、SoftBank君を無視してるみたいなので、そのあたりをカスタマイズ
awstats/wwwroot/cgi-bin/lib/browsers.pm
43d42
< 'vodafone',
233d231
< 'vodafone','Softbank (3G/Non-3G)',
448d445
< 'vodafone','softbank',


これでめでたくカウントされるようになりましたとさ。

2007/12/18

PostgreSQLのユーザ定義関数

人が作ったDBを別のサーバに移す作業をしたワケですけど、pg_dump で出力したらユーザ定義関数の一部がエクスポートされないいんすよ?なんでだろ?わかんねーや。
#PostgreSQL 7.2.2 on i686-pc-linux-gnu, compiled by GCC 2.96

でも、なんとかしないといけないので、ダルいけど調べて対処しなきゃ。

ユーザ定義関数は システムカタログの pg_proc に格納されてるので、pg_user.usename でユーザID調べて抽出条件にする。
hoge=> SELECT usename, usesysid FROM pg_user;
usename | usesysid
----------+----------
postgres | 1
hoge | 100
(2 rows)

hoge=> SELECT proname, proowner, prosrc FROM pg_proc WHERE proowner = 100;
proname | pronargs | prosrc
---------------+----------+-----------------
foo | 2 | SELECT $1 + $2;
(1 rows)


あれ、引数と戻り値がわかんねーや。どこに格納されてんだろ?
8.0 以降だと、一緒に格納されてるみたいだけど?
まぁいいや、コマンドでしらべよう

hoge=> \df foo
List of functions
Result data type | Name | Argument data types
------------------+------+---------------------
integer | foo | integer, integer
(1 row)


あとは、CREATE FUNCTION で関数作ってやればオッケー
CREATE FUNCTION foo(integer, integer) RETURNS integer
AS 'SELECT $1 + $2;'
LANGUAGE SQL;

Google Analytics