最初はとりあえずTOPにとりとめなく書いていくことにする。
例:2.0系 (インストールフォルダ=/usr/local/apache2.0)
./configure --prefix=/usr/local/apache2.0 --enable-mods-shared=all --enable-proxy --enable-ssl --enable-cache --enable-disk-cache --enable-mem-cache
例:2.2系
./configure --enable-mods-shared=all --enable-proxy --enable-proxy-balancer --enable-ssl --enable-cache --enable-disk-cache --enable-mem-cache
LoadModule cache_module modules/mod_cache.so
<IfModule mod_cache.c>
LoadModule disk_cache_module modules/mod_disk_cache.so
<IfModule mod_disk_cache.c>
CacheRoot /var/cache/apache2/
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 3
</IfModule>
</IfModule>
ex) /〜 を /m/〜にリダイレクト
RewriteCond %{REQUEST_URI} !^/m/
RewriteRule ^/(.*)$ /m/$1 [R,L]
RewriteCond %{HTTP_USER_AGENT} DoCoMo
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|jpeg)$ [NC]
RewriteCond %{QUERY_STRING} !guid=ON
RewriteCond %{QUERY_STRING} !sid=
RewriteCond %{QUERY_STRING} !sSpnm=
RewriteRule ^/(.*)$ /$1?guid=ON [R,L]
ProxyPass / balancer://test/ stickysession=JSESSIONID nofailover=On timeout=2 <Proxy balancer://test/> BalancerMember ajp://192.168.0.11:8009 keepalive=On loadfactor=100 retry=5 route=node01 BalancerMember ajp://192.168.0.12:8009 keepalive=On loadfactor=100 retry=5 route=node02 </Proxy>
ProxyPass / balancer://test/ nofailover=On timeout=2 <Proxy balancer://test/> BalancerMember ajp://192.168.0.11:8009 keepalive=On loadfactor=100 retry=5 BalancerMember ajp://192.168.0.12:8009 keepalive=On loadfactor=100 retry=5 </Proxy>
基本、最新版ソースを普通にconfigure→make→make installすればOK。confは上書きされない。
Basic認証がかかってるとされないぞ。
以下の項目を見直してみよう。
rolatelogsを使ってローテーションする場合
CustomLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/access_log.%Y%m%d 86400" common ErrorLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/error_log.%Y%m%d 86400"
例:
CATALINA_OPTS="-server -Xms1024M -Xmx1024M -XX:PermSize=128m -XX:MaxPermSize=256m -Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP"
※「-Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP」はWindowsでの機種依存文字対応に使用する。
http://d.hatena.ne.jp/cazzie/20080312/1205329765
バイナリからインストールした場合のサービススクリプト。
以下を/etc/rc.d/init.d/tomcat 以下に置く。
#!/bin/sh
#
# chkconfig: - 80 20
# description: tomcat
# Source function library.
. /etc/init.d/functions
JAVA_HOME=/usr/java/jdk1.6.0_24
CATALINA_HOME=/opt/tomcat
TOMCAT_USER=tomcat
TMP_DIR=/tmp
CATALINA_OPTS=
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar
PIDFILE=/var/run/tomcat.pid
LOCKFILE=/var/lock/subsys/tomcat
DAEMON=$CATALINA_HOME/bin/jsvc
start(){
#
# Start Tomcat
#
if [ -z $(/sbin/pidof java) ]; then
echo "Starting tomcat"
sudo -u tomcat $CATALINA_HOME/bin/startup.sh
touch $LOCKFILE
echo_success
else
echo "tomcat already running"
echo_failure
fi
echo ""
}
stop(){
#
# Stop Tomcat
#
if [ ! -z $(/sbin/pidof java) ]; then
echo "Shutting down tomcat"
sudo -u tomcat $CATALINA_HOME/bin/shutdown.sh
until [ -z $(/sbin/pidof java) ]; do :; done
rm -f $LOCKFILE
echo_success
else
echo "tomcat not running"
echo_failure
fi
echo ""
}
status() {
if [ ! -z $(/sbin/pidof java) ]; then
echo "tomcat already running"
else
echo "tomcat not running"
fi
echo ""
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
version)
$CATALINA_HOME/bin/catalina.sh version
;;
*)
echo $"Usage: tomcat {start|stop|restart|status}"
exit 1
;;
esac
catalina.outは通常ローテーション処理されないため、「/usr/local/tomcat/bin/catalina.sh」を以下のように書き換えて対応する。
1. 以下の行をコメントアウト
変更前
touch "$CATALINA_BASE"/logs/catalina.out
変更後
#touch "$CATALINA_BASE"/logs/catalina.out
2. 以下の行を変更(2箇所ある)
※Apacheのrotatelogsが「/usr/local/apache2/bin」に存在する場合。「540」はロケールを日本時間に合わせるために記述。~
変更前
>> "$CATALINA_BASE"/logs/catalina.out 2>&1 &
変更後
2>&1 | /usr/local/apache2/bin/rotatelogs "$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d 86400 540 &
参考:
http://blog.goo.ne.jp/a24kane2000/e/e84b45ecf07df708cb089c12cbae5994
http://d.hatena.ne.jp/hogem/20080220/1203439193
デフォルトでは設定不足。特にconnectionTimeoutなどは重要!
<Connector port="8009" protocol="AJP/1.3"
maxThreads="200" minSpareThreads="25" maxSpareThreads="200"
backlog="100" connectionTimeout="20000"
enableLookups="false" redirectPort="8443" />
http://www.atmarkit.co.jp/fjava/rensai4/troublehacks06/troublehacks06_3.html
http://tomcat.apache.org/connectors-doc/generic_howto/timeouts.html
IBMJavaはデフォルトで5分おきにjavacore dumpを出力する模様。
Tomcat起動時などで抑制したい場合は、「-Xdump:none」環境変数を指定して起動するようにする。
Usage: -Xdump:help Print general dump help -Xdump:none Ignore all previous/default dump options -Xdump:events List available trigger events -Xdump:request List additional VM requests -Xdump:tokens List recognized label tokens -Xdump:dynamic Enable support for pluggable agents -Xdump:what Show registered agents on startup -Xdump:<type>:help Print detailed dump help -Xdump:<type>:none Ignore previous dump options of this type -Xdump:<type>:defaults Print/update default settings for this type -Xdump:<type> Request this type of dump (using defaults) Dump types: -Xdump:console Basic thread dump to stderr -Xdump:system Capture raw process image -Xdump:tool Run command line program -Xdump:java Write application summary -Xdump:heap Capture raw heap image -Xdump:snap Take a snap of the trace buffers
my.cnf指定(マスター)
log-bin # バイナリログ出力 server-id=1 # マスターサーバのID expire_logs_days=30 # バイナリログを30日で削除
参考サイト
※標準アダプタではセッションDB格納ができないため、oracle_enhanced-adapterを使用するのが良い。
gem install activerecord-oracle_enhanced-adapter
・rake db:resetはつかえない(drop databaseが使えないため)
・テーブル名やインデックス付加の場合の名前などは30文字を超えないように注意
use Socket;
$host = "localhost";
$path = "test/test/";
$data = "testdata1=test";
socket(SOCKET, PF_INET, SOCK_STREAM, 0);
connect(SOCKET, pack_sockaddr_in(80, inet_aton($host)));
select(SOCKET); $|=1; select(STDOUT);
print SOCKET "POST /$path HTTP/1.0\r\n";
print SOCKET "Content-Length: ".length($data)."\r\n";
print SOCKET "\r\n";
print SOCKET $data;
while (<SOCKET>){print $_;}
require 'net/http'
Net::HTTP.version_1_2
host = "localhost"
port = "80"
uri = "test/test/"
param = "test=test1"
Net::HTTP.start(host, port) {|http|
response = http.post(uri , param)
puts response.body
}
find . | xargs nkf --guess
ssh -fNL <ローカルポート>:IP:<ターゲットポート> <ターゲットサーバ>
$ ssh -fNL 6667:irc.hoge:6667 gate.hoge.jp
for FILE in `grep -l tmp_ *`; do cp $FILE $FILE.bak; sed -e "s/tmp_//g" $FILE.bak > $FILE; done
http://q.hatena.ne.jp/1194317312
du -k / | sort -n| tail -10
例:ファイル名にlogを含む、かつtar.gzを含まないファイルの、"2008/11/11"を含む行を表示
find ./ | grep -e "log" | grep -v "tar.gz" | xargs grep -e "2008/11/11"
find . -name .svn -type d -exec rm -rf {} \;
gem update --system
grepでactive~とactionのライブラリ取得→ループ
gem list | grep "^\(active\|action\)" | while read n v; do gem uninstall $n -aix ; done
cat /proc/cpuinfo
:g/^#.*$/d
:g/^ *#.*$/d
:g/^$/d
function doNotDouble(form) {
var elements = form.elements;
for (var i = 0; i < elements.length; i++) {
if (elements[i].type == 'submit') {
elements[i].disabled = true;
}
}
}
# Viewでこんな感じで指定 onClick="doNotDouble(form);"