自社のローカルにあるFedora7で、外部サーバにあるバックアップファイルを定期的にダウンロード
していたのですが、Fedora9に変えたところ定期的にダウンロードできなくなっていました。
原因はiptableでした。
-------------------------
【解決方法】
/etc/sysconfig/iptables-configの
IPTABLES_MODULES=""
となっている所を変更
IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"
/etc/sysconfig/iptableに下記を追加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
iptablesを再起動
/etc/rc.d/init.d/iptables restart
以上の設定により外部のFTPサーバからファイルをダウンロードすることができるようになりました。
2008年5月31日土曜日
2008年5月29日木曜日
2008年5月28日水曜日
SQLで年度別のデータカウントを取得する
仕事で年度別のデータカウントを取得しなければならなかったので、できるだけプログラム(PHP)で処理をしなくていいようにSQLを考えてみた。
※MySQLのみ想定しています。Postgresの場合はpdateの型とdate_formatをto_char(pdate, 'YYYY-04-01 00:00:00')とすれば良いかと。動作保障はできませんので悪しからず。MySQL5.0.45での動作は確認済。
------------------------------------------------------------
年度はX年4月1日~(X+1)年3月31日とする。
例: 2008年4月1日~2009年3月31日は2008年度、 2008年3月31日は2007年度
テスト用テーブル:test
id, pdate(DATETIME型)
1,2008-03-31 00:00:00
2,2008-04-02 00:00:00
3,2007-10-21 00:00:00
4,2007-04-02 00:00:00
5,2007-03-31 00:00:00
6,2006-04-01 00:00:00
上記の年度はそれぞれ 2007, 2008, 2007, 2007, 2006, 2006 となるはず。
【SQL】
SELECT pdate , count(pdate) as yearly_cnt FROM (
SELECT extract(YEAR FROM pdate)-1 as pdate, id FROM test WHERE pdate <>
UNION
SELECT extract(YEAR FROM pdate) as pdate, id FROM test WHERE pdate >= date_format(pdate, '%Y-04-01 00:00:00')
) as tmp_tbl GROUP BY pdate
【実行結果】
pdate yearly_cnt
2006 2
2007 3
2008 1
※MySQLのみ想定しています。Postgresの場合はpdateの型とdate_formatをto_char(pdate, 'YYYY-04-01 00:00:00')とすれば良いかと。動作保障はできませんので悪しからず。MySQL5.0.45での動作は確認済。
------------------------------------------------------------
年度はX年4月1日~(X+1)年3月31日とする。
例: 2008年4月1日~2009年3月31日は2008年度、 2008年3月31日は2007年度
テスト用テーブル:test
id, pdate(DATETIME型)
1,2008-03-31 00:00:00
2,2008-04-02 00:00:00
3,2007-10-21 00:00:00
4,2007-04-02 00:00:00
5,2007-03-31 00:00:00
6,2006-04-01 00:00:00
上記の年度はそれぞれ 2007, 2008, 2007, 2007, 2006, 2006 となるはず。
【SQL】
SELECT pdate , count(pdate) as yearly_cnt FROM (
SELECT extract(YEAR FROM pdate)-1 as pdate, id FROM test WHERE pdate <>
UNION
SELECT extract(YEAR FROM pdate) as pdate, id FROM test WHERE pdate >= date_format(pdate, '%Y-04-01 00:00:00')
) as tmp_tbl GROUP BY pdate
【実行結果】
pdate yearly_cnt
2006 2
2007 3
2008 1
2008年5月27日火曜日
Smartyでimplodeを利用する。
Smartyのテンプレート内でimplodeを利用するには下記の様に記述します。
{","|implode:$aryData}
$aryDataが array("A", "B", "C"); となっているとすると、上記コードは
A,B,C と表示されます。
ちなみにimplodeのマニュアルによると「歴史的な理由により、引数をどちら の順番でも受けつけることが可能」とあるので、
{$aryDataimplode:","}
としても同じ結果が得られるはず。
しかしながら結果は
Array
{$aryData|implode:","}
とするとOK
・・・なぜ?
ちなみにSmartyのVersionは 2.6.17です。
{","|implode:$aryData}
$aryDataが array("A", "B", "C"); となっているとすると、上記コードは
A,B,C と表示されます。
ちなみにimplodeのマニュアルによると「歴史的な理由により、引数をどちら の順番でも受けつけることが可能」とあるので、
{$aryDataimplode:","}
としても同じ結果が得られるはず。
しかしながら結果は
Array
{$aryData|implode:","}
とするとOK
・・・なぜ?
ちなみにSmartyのVersionは 2.6.17です。
2008年5月26日月曜日
Virtual PC 2007で動作しているFedora7の時間がおかしくなるのを自動的に直す
私は現在開発でVirtual PCにFedora7をインストールして、apache, php, MySQLを動作させています。
Virtual PCを利用しているとよく「状態の保存」を利用するのですが、その場合、復帰させると時刻が進まないままになってしまっています。
時間に関係するような処理をしていると、実際の時間とずれているので困ることがあります。
自動的に時間を修正させることでその問題に対処します。
ntpdateコマンドを定期的に実行することで実現させます。
ntpサーバはNICTのntpサーバを利用します。
※自身が利用しているプロパイダでntpサーバを利用できないかをまず調べて、 利用できるならそちらを利用する方が良いと思います。
OCNとASAHIネットはntpサーバがあるようです。
# crontab -e
@reboot /usr/sbin/ntpdate ntp.nict.jp
0 * * * * /usr/sbin/ntpdate ntp.nict.jp
上記により起動時と毎時0分にntpサーバとの時刻同期が実行されます。
しかしながら、一度時刻同期をしてしまうと「状態保存」「シャットダウン」をしない限りはさほどずれは問題にならないので、毎時間実行するのは無駄のような気がします。
1日10時間起動してても単純計算で10回程度ですが、多くの人が一つのntpサーバに問い合わせるとサーバへの負荷とトラフィックの増加を招きます。
できる限りそういう事態は避けたいところ。
調べてみるとWindowsTimeサービスなるものがあるらしいのでそれにチャレンジしてみる予定。
Virtual PCを利用しているとよく「状態の保存」を利用するのですが、その場合、復帰させると時刻が進まないままになってしまっています。
時間に関係するような処理をしていると、実際の時間とずれているので困ることがあります。
自動的に時間を修正させることでその問題に対処します。
ntpdateコマンドを定期的に実行することで実現させます。
ntpサーバはNICTのntpサーバを利用します。
※自身が利用しているプロパイダでntpサーバを利用できないかをまず調べて、 利用できるならそちらを利用する方が良いと思います。
OCNとASAHIネットはntpサーバがあるようです。
# crontab -e
@reboot /usr/sbin/ntpdate ntp.nict.jp
0 * * * * /usr/sbin/ntpdate ntp.nict.jp
上記により起動時と毎時0分にntpサーバとの時刻同期が実行されます。
しかしながら、一度時刻同期をしてしまうと「状態保存」「シャットダウン」をしない限りはさほどずれは問題にならないので、毎時間実行するのは無駄のような気がします。
1日10時間起動してても単純計算で10回程度ですが、多くの人が一つのntpサーバに問い合わせるとサーバへの負荷とトラフィックの増加を招きます。
できる限りそういう事態は避けたいところ。
調べてみるとWindowsTimeサービスなるものがあるらしいのでそれにチャレンジしてみる予定。
2008年5月25日日曜日
Virtual PC 2007にFedora9をインストール
マシン構成
OS : Windows Vista Ultimate
CPU: Core2 Duo E6850
Memory:4G
Fedora9をここからダウンロード。
Mirror選択が面倒な人はここ。→ Fedora-9-i386-DVD.iso
インストール時のオプションは
vesa i8042.noloop psmouse.proto=imps clock=pit noapic nolapic vga=786
インストール後に起動しようとすると「回復できないプロセッサエラー」が1回発生したあと起動できる。
その後、起動時に必ず「回復できないプロセッサエラー」→「リセット」が起こる。
noreplace-pravirt
をオプションに追加することで「回復できないプロセッサエラー」が発生することなく起動可能。
OS : Windows Vista Ultimate
CPU: Core2 Duo E6850
Memory:4G
Fedora9をここからダウンロード。
Mirror選択が面倒な人はここ。→ Fedora-9-i386-DVD.iso
インストール時のオプションは
vesa i8042.noloop psmouse.proto=imps clock=pit noapic nolapic vga=786
インストール後に起動しようとすると「回復できないプロセッサエラー」が1回発生したあと起動できる。
その後、起動時に必ず「回復できないプロセッサエラー」→「リセット」が起こる。
noreplace-pravirt
をオプションに追加することで「回復できないプロセッサエラー」が発生することなく起動可能。
登録:
投稿 (Atom)