nginxでもcronolog -Sしたい
nginxでもcronolog -Sしてログを日毎に分けて且つ最新のログのシンボリックリンクを自動生成したい。
Apacheでよくやる設定
CustomLog "|/usr/sbin/cronolog -S /path/log/app/access_log /path/log/app/%Y/%m/%d_access_log" combined
nginxだとserverディレクティブのaccess_logにapacheのようには書けない
access_log /path/log/app/access_log main;
https://gist.github.com/ntakaaki/2891895
こちらを参考に
nginxのinitファイルを書き換える
ただし、mkfifoなパイプだとfluentdでtail出来ないので
cronolog_start()内のcronologの実行部分だけちょっと変更
==========================================
cronolog_start() {
if ! [ -p $logdir/access_log_pipe ]; then
rm -f $logdir/access_log_pipe
rm -f $logdir/error_log_pipe
mkfifo $logdir/access_log_pipe
mkfifo $logdir/error_log_pipe
fi
/bin/sh -c "/bin/cat $logdir/access_log_pipe | $cronolog -S $logdir/access_log $logdir/%Y/%m/%d_access_log &"
/bin/sh -c "/bin/cat $logdir/error_log_pipe | $cronolog -S $logdir/error_log $logdir/%Y/%m/%d_error_log &"
==========================================
そしてnginxのアクセスログの吐き出し先はパイプを指定
access_log /path/log/app/access_log_pipe main;
これで
access_log_pipeと別にaccess_logという最新ログを参照したシンボリックリンクが出来る。
td-agent.confのsourceディレクティブは下記のように設定すればtail可能
type tail
pos_file /path/log/api/access_log.pos
fluent-plugin-tail-ex使えって話もある
PHP7検証
PHP5.6.14とPHP7.0.0RC4 (10/22時点最新)の性能比較メモ
環境:CentOS7
IDCFクラウド highcpu.M4 cpu x 2 memory 4GB
試したい事
- PHP5とPHP7の単純な性能比較
- 各種Webサーバ Apache(mod_php)、nginx、h2o上でのPHP5とPHP7比較
- 上の性能が良い組み合わせ上でフレームワーク(silex)での簡単な比較
準備
mysqlクライアントだけyumで入れておく
Apache2.4、Nginxもyumでok
H2O
$ git clone git@github.com:h2o/h2o.git
$ cd h2o
$ git submodule update --init --recursive
$ cmake .
#cmakeが古い場合は最新版にする
$ make install
libuvが古いと言われたので
$ wget http://dist.libuv.org/dist/v1.7.5/libuv-v1.7.5.tar.gz
$ sh autogen.sh
$ ./configure
$ make
$ make install
もう一度
$ cd h2o
$make install
ok
適当な場所にH2Oの設定ファイルを記述します。
$ sudo mkdir /usr/local/h2o
$ sudo cp ~/h2o/examples/h2o/h2o.conf /usr/local/h2o/
$ emacs /usr/local/h2o # virtualhostとphp-fpmの設定
phpenv+php-buildでphp5と7をインストール
$ git clone https://github.com/CHH/phpenv.git
$ cd phpenv/bin/
$ sh phpenv-install.sh
$ cat << EOS > ~/.bashrc
export PATH="~/.phpenv/bin:$PATH"
eval "\$(phpenv init -)"
EOS
$ source ~/.bashrc
$ git clone https://github.com/CHH/php-build.git
$ cd php-build/
$ sh install.sh
$ php-build --definitions
5.6.11
5.6.12
5.6.13
5.6.14
5.6snapshot
7.0.0alpha1
7.0.0alpha2
7.0.0beta1
7.0.0beta2
7.0.0beta3
7.0.0RC1
7.0.0RC2
7.0.0RC3
7.0.0RC4
7.0snapshot
master
最新っぽいRC4を入れたい
その前に、apxsを有効にしてlibphp.soを生成するように指定
$ emacs /usr/local/share/php-build/definitions/7.0.0RC4
configure_option "--with-apxs2" "/usr/bin/apxs"を一番上に記述
$ php-build 7.0.0RC4 ~/.phpenv/versions/7.0.0RC4
エラーが出るので必要なパッケージをインストール
$ yum install libxml2-devel bison bison-devel openssl-devel curl-devel libjpeg-devel libpng-devel libmcrypt-devel readline-devel libtidy-devel libxslt-devel
もう一度
$ sudo php-build 7.0.0RC4 ~/.phpenv/versions/7.0.0RC4
$ phpenv versions
* system (set by /root/.phpenv/version)
7.0.0RC4
~/.phpenv/versions/7.0.0RC4/bin/php --version
PHP 7.0.0RC4 (cli) (built: Oct 6 2015 02:11:41)
OK!
5.6.14も同様にインストールしておく
phpバージョンの切り替えテスト
$ phpenv versions
system
5.6.14
* 7.0.0RC4 (set by /root/.phpenv/version)
$ php -v
PHP 7.0.0RC4 (cli) (built: Oct 6 2015 14:25:27)
$ which php
~/.phpenv/shims/php
ok
php.iniは
~/.phpenv/versions/{version}/php.ini
php-fpm.confは
~/.phpenv/versions/{version}/etc/php-fpm.conf
それぞれ動くように設定しておく。
phpenvで入れるとpeclコマンドがない。
pecl-buildを入れてみる
git clone https://github.com/berenddeboer/pecl-build.git ~/.phpenv/plugins/pecl-build
使い方
% phpenv pecl <package_name>
% phpenv pecl <package_name> -j <php version>
% phpenv pecl <package_name> -a # build all php version by phpenv have.
% phpenv pecl <package_name>-<package_version>
memcachedを入れる
sudo yum install libmemcached libmemcached-devel
phpenv pecl memcached -a
php7には対応していない。。(php5はphpenv peclでok)
php7ブランチがあったのでphp7はphpizeで入れる
git clone -b php7 git@github.com:php-memcached-dev/php-memcached.git
cd php-memcached/
phpize
./configure
make && make install
sudo emacs /etc/httpd/conf.d/php.conf
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
DNS、vhosts設定して
sudo systemctl start httpd
ok
パフォーマンステスト
== (test.php)
$time_start = microtime(true);
$loop = 10000000;
for($i=0;$i<$loop;$i++) {
$a = rand()/5;
$b++;
}
$timelimit = microtime(true) - $time_start;
echo $timelimit . " seconds" . PHP_EOL;
==
単純な計算をコマンドで実行
PHP 5.6.14
$ php test.php
7.0333759784698 seconds
$ phpenv global 7.0.0RC4
php -v
PHP 7.0.0RC4 (cli) (built: Oct 6 2015 14:25:27)
$ php test.php
0.93678998947144 seconds
php7が7倍高速!
■apache + mod_php
さっきのを1000ループに減らしたもので
php5
ab -c 100 -n 10000 http://example.com/test.php
Requests per second: 1450.86 [#/sec] (mean)
Time per request: 68.925 [ms] (mean)
php7
ab -c 100 -n 10000 http://example.com/test.php
Requests per second: 3687.95 [#/sec] (mean)
Time per request: 27.115 [ms] (mean)
echoするだけのプログラム
php5
ab -c 100 -n 10000 http://example.com/
Requests per second: 2949.06 [#/sec] (mean)
Time per request: 33.909 [ms] (mean)
php7
ab -c 100 -n 10000 http://example.com/
Requests per second: 4232.79 [#/sec] (mean)
Time per request: 23.625 [ms] (mean)
phpinfo()
php5
ab -c 100 -n 10000 http://example.com/big.php
Requests per second: 737.53 [#/sec] (mean)
Time per request: 135.588 [ms] (mean)
php7
ab -c 100 -n 10000 http://example.com/big.php
Requests per second: 913.32 [#/sec] (mean)
Time per request: 109.491 [ms] (mean)
100万ループテスト
php5
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 2.97 [#/sec] (mean)
Time per request: 3367.520 [ms] (mean)
一応動く
php7
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 34.15 [#/sec] (mean)
Time per request: 292.820 [ms] (mean)
1000万ループテスト
php5
ab -c 10 -n 100 http://example.com/test.php
Benchmarking example.com (be patient)...apr_poll: The timeout specified has expired (70007)
ダメ
php7
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 3.50 [#/sec] (mean)
Time per request: 2858.561 [ms] (mean)
Apache上ではphp7が2倍以上高速
■h2o + php-fpm
1000ループテスト
php5
ab -c 100 -n 10000 http://example.com/test.php
Requests per second: 1851.19 [#/sec] (mean)
Time per request: 54.019 [ms] (mean)
php7
ab -c 100 -n 10000 http://example.com/test.php
Requests per second: 6500.18 [#/sec] (mean)
Time per request: 15.384 [ms] (mean)
echoするだけのプログラム
php5
ab -c 100 -n 10000 http://example.com/
Requests per second: 5006.01 [#/sec] (mean)
Time per request: 19.976 [ms] (mean)
同時150くらいにするとエラーが出始める
php7
ab -c 100 -n 10000 http://example.com/
Requests per second: 7890.59 [#/sec] (mean)
Time per request: 12.673 [ms] (mean)
ab -c 150 -n 10000 http://example.com/
Requests per second: 9101.12 [#/sec] (mean)
Time per request: 16.481 [ms] (mean)
ab -c 160 -n 10000 http://example.com/
Requests per second: 9887.56 [#/sec] (mean)
Time per request: 16.182 [ms] (mean)
php7なら同時160でもいける。速い
phpinfo()
php5
ab -c 100 -n 10000 http://example.com/big.php
Requests per second: 894.79 [#/sec] (mean)
Time per request: 111.758 [ms] (mean)
php7
ab -c 100 -n 10000 http://example.com/big.php
Requests per second: 1213.25 [#/sec] (mean)
Time per request: 82.423 [ms] (mean)
100万ループテスト
php5
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 2.59 [#/sec] (mean)
Time per request: 3864.566 [ms] (mean)
php7
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 34.35 [#/sec] (mean)
Time per request: 291.094 [ms] (mean)
1000万ループテスト
php5
ab -c 10 -n 100 http://example.com/test.php
Benchmarking example.com (be patient)...apr_poll: The timeout specified has expired (70007)
ダメ
php7
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 3.54 [#/sec] (mean)
Time per request: 2825.790 [ms] (mean)
一応落ちないで動く
h2o(php-fpm)でもphp7の方が1.5倍程高速で且つ、Apache(mod_php)より2倍近く高速
■nginx + php-fpm
1000ループテスト
php5
ab -c 100 -n 10000 http://example.com/test.php
Requests per second: 1982.36 [#/sec] (mean)
Time per request: 50.445 [ms] (mean)
php7
ab -c 100 -n 10000 http://example.com/test.php
Requests per second: 6415.60 [#/sec] (mean)
Time per request: 15.587 [ms] (mean)
h2oと同じくらい
echoするだけのプログラム
php5
ab -c 100 -n 10000 http://example.com/
Requests per second: 5986.77 [#/sec] (mean)
Time per request: 16.703 [ms] (mean)
ちょっとチューニングしたらh2oより速い
同じく同時150くらいにするとエラーが出始める。php-fpmの所為か?
php7
ab -c 100 -n 10000 http://example.com/
Requests per second: 7491.07 [#/sec] (mean)
Time per request: 13.349 [ms] (mean)
まあまあ
ab -c 150 -n 10000 http://example.com/
Requests per second: 7939.24 [#/sec] (mean)
Time per request: 18.894 [ms] (mean)
H2oより遅い。チューニング次第か?
ab -c 160 -n 10000 http://example.com/
Requests per second: 8172.21 [#/sec] (mean)
Time per request: 19.579 [ms] (mean)
php7なら同時160でもいける。速い
phpinfo()
php5
ab -c 100 -n 10000 http://example.com/big.php
Requests per second: 982.88 [#/sec] (mean)
Time per request: 101.742 [ms] (mean)
h2oより速い
php7
ab -c 100 -n 10000 http://example.com/big.php
Requests per second: 1172.76 [#/sec] (mean)
Time per request: 85.269 [ms] (mean)
100万ループテスト
php5
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 2.91 [#/sec] (mean)
Time per request: 3440.755 [ms] (mean)
php7
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 37.73 [#/sec] (mean)
Time per request: 265.066 [ms] (mean)
h2oと同じくらい
1000万ループテスト
php5
ab -c 10 -n 100 http://example.com/test.php
apr_poll: The timeout specified has expired (70007)
ダメ
php7
ab -c 10 -n 100 http://example.com/test.php
Requests per second: 3.63 [#/sec] (mean)
Time per request: 2754.137 [ms] (mean)
一応落ちないで動く h2oと同じ
nginx(php-fpm)でもphp7の方が高速で且つ、Apache(mod_php)より2倍近く高速
性能的にはh2oとの組み合わせと同じ (純粋にfast-cgiの性能が表面化しているだけか)
今回はAPI実装に使えるかを確認したいのでh2oではなく、安定したnginxを採用。
まずはsilexで単純なコントローラを作って試してみます。
silexがphp7で動作するかも検証目的になります。
nginx+php7+silex
結果、難なくphp7でsilexは動作しました。
datetimeオブジェクトでgetTimestamp()を返すテストコントローラ実行
ab -c 10 -n 100 http://example.com/test/?api_key=8057549061662792094a3df3df9bfe3291550260ccf0cdb708483905777abbba
Requests per second: 619.37 [#/sec] (mean)
Time per request: 16.145 [ms] (mean)
ab -c 30 -n 500 http://example.com/test/?api_key=8057549061662792094a3df3df9bfe3291550260ccf0cdb708483905777abbba
Requests per second: 788.53 [#/sec] (mean)
Time per request: 38.046 [ms] (mean)
ab -c 50 -n 1000 http://example.com/test/?api_key=8057549061662792094a3df3df9bfe3291550260ccf0cdb708483905777abbba
Requests per second: 791.92 [#/sec] (mean)
Time per request: 63.137 [ms] (mean)
DB接続はしていないけど、色々クラスをロードしている割には速い印象
nginx+php5+silex
systemctl stop php-fpm.service
systemctl start php-fpm5
ab -c 10 -n 100 http://example.com/test/?api_key=8057549061662792094a3df3df9bfe3291550260ccf0cdb708483905777abbba
Requests per second: 170.59 [#/sec] (mean)
Time per request: 58.619 [ms] (mean)
ab -c 50 -n 1000 http://example.com/test/?api_key=8057549061662792094a3df3df9bfe3291550260ccf0cdb708483905777abbba
Requests per second: 183.43 [#/sec] (mean)
Time per request: 272.587 [ms] (mean)
silex上では、php5よりphp7の方が3倍以上速い
まとめ
php5よりphp7の方が2倍以上速い
apache+mod_phpより nginx or h2o + php-fpmの方が速い
HTTP/2の恩恵があまり無さそうなAPIサーバであれば、
nginx + php-fpm (php7) が安定していて高速。
とりあえずphp7はphp5よりかなり高速化されている事は分かった。
todo
php5.6+Phalcon vs php7+silex
※phalconはphp7未対応なので
PowerDNSの構成案
PowerDNSの構成案メモ
・ソフトウェア
PowerDNS3.4.4
MariaDB10.0.17
・PowerDNS バックエンド
gmysql NATIVEモード:MySQLのレプリケーションバージョン(ZONE転送無し)
ゾーン転送は重い&ゾーン削除が出来ないため。
・ネットワーク構成
非公開マスタサーバ(pdns+MySQLマスタ) x 1
NSサーバとしては公開しない。DBのマスタ、ローカルからのレコード確認。
独自UIでMySQLレコードを操作、または手動操作、またはpdnsのAPIでのレコード操作。
公開ネームサーバ(pdns+mysqlスレーブ) x 3
NSサーバとして公開
データはマスタDBのスレーブで自動同期
・PowerDNS設定(pdns.conf)
launch=gmysql
gmysql-host=localhost
gmysql-user=xxx
gmysql-password=xxx
gmysql-dbname=pdns
gmysql-dnssec=no
# パケットキャッシュする秒数
cache-ttl=60
# クエリキャッシュする秒数(個々のバックエンドへのクエリをキャッシュ)
query-cache-ttl=60
# ネガティブキャッシュのクエリキャッシュ秒数
negquery-cache-ttl=60
# Maximum number of milliseconds to queue a query
queue-limit=1500
# 起動するスレッド数
receiver-threads=4
#backendスレッド数
distributor-threads=4
# ロギングON
log-dns-details=yes
# backendのクエリログ出力
# バックエンドのクエリログはOFF
query-logging=no
# syslogファシリティ
logging-facility=0
# クエリログ OFF時
log-dns-queries=no
# クエリログ ON時 ONにすると1/5から1/10程度に応答性能が下がる
#log-dns-queries=yes
# ログレベル (4-9) 4,5だと実質クエリログが出ないので意味がない。6〜9はクエリログが出るが内容に差がないためloglevel=6とする。
loglevel=6
性能
キャッシュが効けば4coreで8万qps、16coreで18万qps位は出る。
キャッシュが効かないと1/5以下に落ちる。
Linux 2015/7/1 うるう秒調査
2015年7月1日の、うるう秒調査
# 2015/5/26追記
tzdata (2015d-1.el6)が更新されていました。
sudo yum update tzdata
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date -d "2015-07-01 08:59:60"
2015年 7月 1日 水曜日 08:59:60 JST
OK
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708824 second"
20150701 08:59:59
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708825 second"
20150701 08:59:60
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708826 second"
20150701 09:00:00
20150701 08:59:60が挿入されていました。
linuxカーネルが2.6.32-358.el6.x86_64より古い場合はntpdをslewモードに変更しておいた方が良さそうです。
さらに、ntpがntp-4.2.6p5-3.el6より古いとslewモードが動かないバグがあるようなので、古ければ
yum update ntp
しておきます。
ntpをslewモードへ
/etc/sysconfig/ntpd
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid -g"
service ntpd restart
ntpを止めておくという方法でもいいようですが、男らしくslewモードを設定します。
(自己責任)
参考
うるう秒挿入に伴う NTPの動作モード(slewモード)の変更手順書(UNIVERGE PF6800 v3.0 以上 v5.1 未満)
ntp-4.2.6p5-3.el6 より前で ntpd -x が slew にならないバグがある - dechnostick's blog
# 2015/5/26追記ここまで
通常の日本のRedHat系サーバのTZ設定
#cat /etc/sysconfig/clock
ZONE="Asia/Tokyo”
#strings /etc/localtime
TZif2
TZif2
JST-9
通常のLinuxではタイムゾーンは /usr/share/zoneinfo/Asia/Tokyo
で設定してあります。
うるう秒入りのタイムゾーンの定義ファイルは /usr/share/zoneinfo/right以下に有り
東京の場合は /usr/share/zoneinfo/right/Asia/Tokyo
通常はJSTのうるう秒を考慮しないタイムゾーンで設定してあります。
同時に実行すると通常のタイムゾーンとうるう秒対応のタイムゾーンでは現時点で25秒ずれている事が分かります。
これまでに25秒うるう秒が挿入されているという事ですね。
#date && TZ=/usr/share/zoneinfo/right/Asia/Tokyo date
2015年 1月 31日 土曜日 22:19:12 JST
2015年 1月 31日 土曜日 22:18:47 JST
この確認時にタイムゾーンファイルが古い場合はtzdataの更新が必要です。
(ntpdを普通に起動してあれば当日に問題が出る事はない)
#yum check-update | grep tzdata
#yum update tzdata
2015/7/1のUnixtimestampを通常とうるう秒で比較
#date "+%s" -d "2015-07-01 GMT"
1435708800
#TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%s" -d "2015-07-01 GMT"
1435708825
やはり25秒ずれてますね。
#date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708799 second"
20150701 08:59:59
#date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708800 second"
20150701 09:00:00
というように'2015-07-01 08:59:60'とはなりません。
うるう秒対応だと08:59:60となるはず。
#TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708824 second"
20150701 08:59:59
#TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1435708825 second"
20150701 09:00:00
あれ、60秒にならない。
2015/7/1のうるう秒データはまだ無い模様。
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date -d "2012-07-01 08:59:60"
2012年 7月 1日 日曜日 08:59:60 JST
これはok
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date -d "2015-07-01 08:59:60"
date: invalid date `2015-07-01 08:59:60'
だめ
前回の2012/7/1で確認すると
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1341100823 second"
20120701 08:59:59
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1341100824 second"
20120701 08:59:60
TZ=/usr/share/zoneinfo/right/Asia/Tokyo date "+%Y%m%d %H:%M:%S" -d "1970-01-01 GMT +1341100825 second"
20120701 09:00:00
ちゃんと08:59:60が挿入されています。
NTPの状態
#ntpq -c rv
leap=00である事からうるう秒調整は発生していません。
そのうちNTPによりうるう秒の補正が入り
当日は1435708800が2秒つづくといった自動対応になるかと思います。
08:59:59(→ 08:59:59)→ 09:00:00
PHP(確認環境はphp5.4と5.5)だと
php > echo strtotime('2015-07-01 08:59:60');
1435708800
php > echo strtotime('2015-07-01 09:00:00');
1435708800
試しに上記のように明示的に60秒を指定すると次の0秒と同じUnixtimestampを返すようです。
(うるう秒関係無しに)
php > echo date("Y-m-d H:i:s", 1435708799);
2015-07-01 08:59:59
php > echo date("Y-m-d H:i:s", 1435708800);
2015-07-01 09:00:00
逆でも同じ
MySQLは
08:59:60という表記で記録されることは無いようです。
仮に明示的に2015-07-01 08:59:60を指定してしまうと0になってしまいますが、
プログラムで明示的に08:59:60と指定してtimestampを挿入する事はありません。
mysql> select from_unixtime(1435708800), unix_timestamp('2015-07-01 08:59:60');
from_unixtime(1435708800) | unix_timestamp('2015-07-01 08:59:60') |
2015-07-01 09:00:00 | 0.000000 |
タイムゾーンが/usr/share/zoneinfo/Asia/Tokyoでntpd動かしていれば
所謂LAMP構成では基本問題なさそう。
参考
http://www.techscore.com/blog/2015/01/09/leap-second/
http://pocketstudio.jp/log3/2012/06/23/leaptime_2012/
OS X Mavericks にアップデートしたらVagrantが動かない、と思ったらvirtualboxのバージョンアップが問題だった
vagrant status
エラー発生
virtualbox 4.3.6 vagrant has detected that you have a version of virtualbox installed that is not supported.
VirtualBox4.2までしか対応していないらしい
VBoxManage --version
4.3.6r91406
いつの間にかvirtualboxをバージョンアップしていたようだ
vagrant --version
Vagrant version 1.0.7
古い
vagrantをアップデートして対応
gemだと最新が無い
vagrantのサイトで最新版を持ってくる
http://www.vagrantup.com/downloads.html
v.1.4.3のosXパッケージをインストール
vagrant --version
Vagrant 1.4.3
OK
消費税の切り替え(特例措置)
とある月額制携帯公式サイト(まだやってる)
古いサイトなもんで月額表示がいろんなところにハードコードされていてカオス状態。
価格の表示に関する特例措置に対応するため、対象箇所を検索。
find . -regex '.*html' -type f | xargs grep 315 -l
3キャリア用にいっぱい出てくる
月額315円(税込)
月額315円(税込み)
月額315円
会員登録(315円)
315円(消費税込)
(月額315円・税込)
315円(消費税込)
HTMLにハードコードされている部分。
他は動的に置換されているようだが。
ふむふむ。
sedで一発置換と行きたいところだが
for i in `find . -regex '.*html' -type f | xargs grep 315 -l`;do sed "s/315/300/g" $i;done;
そう簡単じゃなくて、
特例措置的に
300円(税別)
としたいところ。
-eで繋げるにしても順番が重要
月額315円(税込み)
月額315円(税込)
会員登録(315円)
315円(消費税込)
315円(消費税込)
(月額315円・税込)
月額315円
for i in `find . -regex '.*html' -type f | xargs grep 315 -l`;do sed -e "s/月額315円(税込み)/300円(税別)/g" -e "s/月額315円(税込)/300円(税別)/g" -e "s/会員登録(315円)/会員登録(300円・税別)/g" -e "s/315円(消費税込)/300円(税別)/g" -e "s/315円(消費税込)/月額300円(税別)/g" -e "s/(月額315円・税込)/(月額300円・税別)/g" -e "s/月額315円/月額300円(税別)/g" $i > tmp/{$i}2;done;
めんどくさ
あ、間違えた(汗)
戻す
for i in `find . -type f -regex ".*html.save"`;do mv $i ${i%.save};done
月額って消しちゃだめ
for i in `find . -regex '.*html' -type f | xargs grep 315 -l`;do sed -e "s/月額315円(税込み)/月額300円(税別)/g" -e "s/月額315円(税込)/月額300円(税別)/g" -e "s/会員登録(315円)/会員登録(300円・税別)/g" -e "s/315円(消費税込)/300円(税別)/g" -e "s/315円(消費税込)/月額300円(税別)/g" -e "s/(月額315円・税込)/(月額300円・税別)/g" -e "s/月額315円/月額300円(税別)/g" $i > $i.tmp; cp $i $i.save; mv $i.tmp $i;done;
あとはコンビニ支払いとかクレジットカード系の個別決済。
これは4/1に自動きりかえが必要だったり、売り上げファイル立てる5月に切り替えが必要だったりと割と大変。