- function expire()
- local args = {}
- local cdate = string.format("%d", _time())
- table.insert(args, "addcond\0x\0NUMLE\0" .. cdate)
- table.insert(args, "out")
- local res = _misc("search", args)
- if not res then
- _log("expiration was failed", 2)
- end
- print("rnum=" .. _rnum() .. " size=" .. _size())
- end
2011-02-02
Tokyo Tyrant ttexpire.lua
Tokyo Tyrant 起動スクリプト スレーブ
- #! /bin/sh
- # chkconfig: 345 65 55
- # description: Startup script for the server of Tokyo Tyrant For Session
- # processname: tokyotyrant
- #----------------------------------------------------------------
- # Startup script for the server of Tokyo Tyrant
- #----------------------------------------------------------------
- # configuration variables
- prog="ttservctl"
- cmd="ttserver"
- basedir="/home/ttserver/data"
- port="1978"
- pidfile="$basedir/ttserver.pid"
- logfile="$basedir/ttserver.log"
- ulogdir="$basedir/ulog"
- ulimsiz="256m"
- sid=2
- mhost="remotehost1"
- mport="1978"
- rtsfile="$basedir/ttserver.rts"
- dbname="$basedir/session.tct#bnum=1000000#idx=x:dec#dfunit=8"
- ext="/home/ttserver/ext/ttexpire.lua"
- extpc="expire 1"
- maxcon="65535"
- retval=0
- # setting environment variables
- LANG=C
- LC_ALL=C
- PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/tokyotyrant/bin"
- export LANG LC_ALL PATH
- # start the server
- start(){
- printf 'Starting the server of Tokyo Tyrant\n'
- mkdir -p "$basedir"
- if [ -z "$basedir" ] || [ -z "$port" ] || [ -z "$pidfile" ] || [ -z "$dbname" ] ; then
- printf 'Invalid configuration\n'
- retval=1
- elif ! [ -d "$basedir" ] ; then
- printf 'No such directory: %s\n' "$basedir"
- retval=1
- elif [ -f "$pidfile" ] ; then
- pid=`cat "$pidfile"`
- printf 'Existing process: %d\n' "$pid"
- retval=1
- else
- if [ -n "$maxcon" ] ; then
- ulimit -n "$maxcon" >/dev/null 2>&1
- fi
- cmd="$cmd -port $port -dmn -pid $pidfile"
- if [ -n "$logfile" ] ; then
- cmd="$cmd -log $logfile"
- fi
- if [ -n "$ulogdir" ] ; then
- mkdir -p "$ulogdir"
- cmd="$cmd -ulog $ulogdir"
- fi
- if [ -n "$ulimsiz" ] ; then
- cmd="$cmd -ulim $ulimsiz"
- fi
- if [ -n "$sid" ] ; then
- cmd="$cmd -sid $sid"
- fi
- if [ -n "$mhost" ] ; then
- cmd="$cmd -mhost $mhost"
- fi
- if [ -n "$mport" ] ; then
- cmd="$cmd -mport $mport"
- fi
- if [ -n "$rtsfile" ] ; then
- cmd="$cmd -rts $rtsfile"
- fi
- if [ -n "$ext" ] ; then
- cmd="$cmd -ext $ext"
- fi
- if [ -n "$extpc" ] ; then
- cmd="$cmd -extpc $extpc"
- fi
- printf "Executing: %s\n" "$cmd"
- cmd="$cmd $dbname"
- $cmd
- if [ "$?" -eq 0 ] ; then
- printf 'Done\n'
- else
- printf 'The server could not started\n'
- retval=1
- fi
- fi
- }
- # stop the server
- stop(){
- printf 'Stopping the server of Tokyo Tyrant\n'
- if [ -f "$pidfile" ] ; then
- pid=`cat "$pidfile"`
- printf "Sending the terminal signal to the process: %s\n" "$pid"
- kill -TERM "$pid"
- c=0
- while true ; do
- sleep 0.1
- if [ -f "$pidfile" ] ; then
- c=`expr $c + 1`
- if [ "$c" -ge 100 ] ; then
- printf 'Hanging process: %d\n' "$pid"
- retval=1
- break
- fi
- else
- printf 'Done\n'
- break
- fi
- done
- else
- printf 'No process found\n'
- retval=1
- fi
- }
- # send HUP to the server for log rotation
- hup(){
- printf 'Sending HUP signal to the server of Tokyo Tyrant\n'
- if [ -f "$pidfile" ] ; then
- pid=`cat "$pidfile"`
- printf "Sending the hangup signal to the process: %s\n" "$pid"
- kill -HUP "$pid"
- printf 'Done\n'
- else
- printf 'No process found\n'
- retval=1
- fi
- }
- # check permission
- if [ -d "$basedir" ] && ! touch "$basedir/$$" >/dev/null 2>&1
- then
- printf 'Permission denied\n'
- exit 1
- fi
- rm -f "$basedir/$$"
- # dispatch the command
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- stop
- start
- ;;
- hup)
- hup
- ;;
- *)
- printf 'Usage: %s {start|stop|restart|hup}\n' "$prog"
- exit 1
- ;;
- esac
- # exit
- exit "$retval"
- # END OF FILE
#! /bin/sh # chkconfig: 345 65 55 # description: Startup script for the server of Tokyo Tyrant For Session # processname: tokyotyrant #---------------------------------------------------------------- # Startup script for the server of Tokyo Tyrant #---------------------------------------------------------------- # configuration variables prog="ttservctl" cmd="ttserver" basedir="/home/ttserver/data" port="1978" pidfile="$basedir/ttserver.pid" logfile="$basedir/ttserver.log" ulogdir="$basedir/ulog" ulimsiz="256m" sid=2 mhost="remotehost1" mport="1978" rtsfile="$basedir/ttserver.rts" dbname="$basedir/session.tct#bnum=1000000#idx=x:dec#dfunit=8" ext="/home/ttserver/ext/ttexpire.lua" extpc="expire 1" maxcon="65535" retval=0 # setting environment variables LANG=C LC_ALL=C PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/tokyotyrant/bin" export LANG LC_ALL PATH # start the server start(){ printf 'Starting the server of Tokyo Tyrant\n' mkdir -p "$basedir" if [ -z "$basedir" ] || [ -z "$port" ] || [ -z "$pidfile" ] || [ -z "$dbname" ] ; then printf 'Invalid configuration\n' retval=1 elif ! [ -d "$basedir" ] ; then printf 'No such directory: %s\n' "$basedir" retval=1 elif [ -f "$pidfile" ] ; then pid=`cat "$pidfile"` printf 'Existing process: %d\n' "$pid" retval=1 else if [ -n "$maxcon" ] ; then ulimit -n "$maxcon" >/dev/null 2>&1 fi cmd="$cmd -port $port -dmn -pid $pidfile" if [ -n "$logfile" ] ; then cmd="$cmd -log $logfile" fi if [ -n "$ulogdir" ] ; then mkdir -p "$ulogdir" cmd="$cmd -ulog $ulogdir" fi if [ -n "$ulimsiz" ] ; then cmd="$cmd -ulim $ulimsiz" fi if [ -n "$sid" ] ; then cmd="$cmd -sid $sid" fi if [ -n "$mhost" ] ; then cmd="$cmd -mhost $mhost" fi if [ -n "$mport" ] ; then cmd="$cmd -mport $mport" fi if [ -n "$rtsfile" ] ; then cmd="$cmd -rts $rtsfile" fi if [ -n "$ext" ] ; then cmd="$cmd -ext $ext" fi if [ -n "$extpc" ] ; then cmd="$cmd -extpc $extpc" fi printf "Executing: %s\n" "$cmd" cmd="$cmd $dbname" $cmd if [ "$?" -eq 0 ] ; then printf 'Done\n' else printf 'The server could not started\n' retval=1 fi fi } # stop the server stop(){ printf 'Stopping the server of Tokyo Tyrant\n' if [ -f "$pidfile" ] ; then pid=`cat "$pidfile"` printf "Sending the terminal signal to the process: %s\n" "$pid" kill -TERM "$pid" c=0 while true ; do sleep 0.1 if [ -f "$pidfile" ] ; then c=`expr $c + 1` if [ "$c" -ge 100 ] ; then printf 'Hanging process: %d\n' "$pid" retval=1 break fi else printf 'Done\n' break fi done else printf 'No process found\n' retval=1 fi } # send HUP to the server for log rotation hup(){ printf 'Sending HUP signal to the server of Tokyo Tyrant\n' if [ -f "$pidfile" ] ; then pid=`cat "$pidfile"` printf "Sending the hangup signal to the process: %s\n" "$pid" kill -HUP "$pid" printf 'Done\n' else printf 'No process found\n' retval=1 fi } # check permission if [ -d "$basedir" ] && ! touch "$basedir/$$" >/dev/null 2>&1 then printf 'Permission denied\n' exit 1 fi rm -f "$basedir/$$" # dispatch the command case "$1" in start) start ;; stop) stop ;; restart) stop start ;; hup) hup ;; *) printf 'Usage: %s {start|stop|restart|hup}\n' "$prog" exit 1 ;; esac # exit exit "$retval" # END OF FILE
Tokyo Tyrant 起動スクリプト マスタ
- #! /bin/sh
- # chkconfig: 345 65 55
- # description: Startup script for the server of Tokyo Tyrant For Session
- # processname: tokyotyrant
- #----------------------------------------------------------------
- # Startup script for the server of Tokyo Tyrant
- #----------------------------------------------------------------
- # configuration variables
- prog="ttservctl"
- cmd="ttserver"
- basedir="/home/ttserver/data"
- port="1978"
- pidfile="$basedir/ttserver.pid"
- logfile="$basedir/ttserver.log"
- ulogdir="$basedir/ulog"
- ulimsiz="256m"
- sid=1
- mhost="remotehost2"
- mport="1978"
- rtsfile="$basedir/ttserver.rts"
- dbname="$basedir/session.tct#bnum=1000000#idx=x:dec#dfunit=8"
- ext="/home/ttserver/ext/ttexpire.lua"
- extpc="expire 1"
- maxcon="65535"
- retval=0
- # setting environment variables
- LANG=C
- LC_ALL=C
- PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/tokyotyrant/bin"
- export LANG LC_ALL PATH
- # start the server
- start(){
- printf 'Starting the server of Tokyo Tyrant\n'
- mkdir -p "$basedir"
- if [ -z "$basedir" ] || [ -z "$port" ] || [ -z "$pidfile" ] || [ -z "$dbname" ] ; then
- printf 'Invalid configuration\n'
- retval=1
- elif ! [ -d "$basedir" ] ; then
- printf 'No such directory: %s\n' "$basedir"
- retval=1
- elif [ -f "$pidfile" ] ; then
- pid=`cat "$pidfile"`
- printf 'Existing process: %d\n' "$pid"
- retval=1
- else
- if [ -n "$maxcon" ] ; then
- ulimit -n "$maxcon" >/dev/null 2>&1
- fi
- cmd="$cmd -port $port -dmn -pid $pidfile"
- if [ -n "$logfile" ] ; then
- cmd="$cmd -log $logfile"
- fi
- if [ -n "$ulogdir" ] ; then
- mkdir -p "$ulogdir"
- cmd="$cmd -ulog $ulogdir"
- fi
- if [ -n "$ulimsiz" ] ; then
- cmd="$cmd -ulim $ulimsiz"
- fi
- if [ -n "$sid" ] ; then
- cmd="$cmd -sid $sid"
- fi
- if [ -n "$mhost" ] ; then
- cmd="$cmd -mhost $mhost"
- fi
- if [ -n "$mport" ] ; then
- cmd="$cmd -mport $mport"
- fi
- if [ -n "$rtsfile" ] ; then
- cmd="$cmd -rts $rtsfile"
- fi
- if [ -n "$ext" ] ; then
- cmd="$cmd -ext $ext"
- fi
- if [ -n "$extpc" ] ; then
- cmd="$cmd -extpc $extpc"
- fi
- printf "Executing: %s\n" "$cmd"
- cmd="$cmd $dbname"
- $cmd
- if [ "$?" -eq 0 ] ; then
- printf 'Done\n'
- else
- printf 'The server could not started\n'
- retval=1
- fi
- fi
- }
- # stop the server
- stop(){
- printf 'Stopping the server of Tokyo Tyrant\n'
- if [ -f "$pidfile" ] ; then
- pid=`cat "$pidfile"`
- printf "Sending the terminal signal to the process: %s\n" "$pid"
- kill -TERM "$pid"
- c=0
- while true ; do
- sleep 0.1
- if [ -f "$pidfile" ] ; then
- c=`expr $c + 1`
- if [ "$c" -ge 100 ] ; then
- printf 'Hanging process: %d\n' "$pid"
- retval=1
- break
- fi
- else
- printf 'Done\n'
- break
- fi
- done
- else
- printf 'No process found\n'
- retval=1
- fi
- }
- # send HUP to the server for log rotation
- hup(){
- printf 'Sending HUP signal to the server of Tokyo Tyrant\n'
- if [ -f "$pidfile" ] ; then
- pid=`cat "$pidfile"`
- printf "Sending the hangup signal to the process: %s\n" "$pid"
- kill -HUP "$pid"
- printf 'Done\n'
- else
- printf 'No process found\n'
- retval=1
- fi
- }
- # check permission
- if [ -d "$basedir" ] && ! touch "$basedir/$$" >/dev/null 2>&1
- then
- printf 'Permission denied\n'
- exit 1
- fi
- rm -f "$basedir/$$"
- # dispatch the command
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- stop
- start
- ;;
- hup)
- hup
- ;;
- *)
- printf 'Usage: %s {start|stop|restart|hup}\n' "$prog"
- exit 1
- ;;
- esac
- # exit
- exit "$retval"
- # END OF FILE
#! /bin/sh # chkconfig: 345 65 55 # description: Startup script for the server of Tokyo Tyrant For Session # processname: tokyotyrant #---------------------------------------------------------------- # Startup script for the server of Tokyo Tyrant #---------------------------------------------------------------- # configuration variables prog="ttservctl" cmd="ttserver" basedir="/home/ttserver/data" port="1978" pidfile="$basedir/ttserver.pid" logfile="$basedir/ttserver.log" ulogdir="$basedir/ulog" ulimsiz="256m" sid=1 mhost="remotehost2" mport="1978" rtsfile="$basedir/ttserver.rts" dbname="$basedir/session.tct#bnum=1000000#idx=x:dec#dfunit=8" ext="/home/ttserver/ext/ttexpire.lua" extpc="expire 1" maxcon="65535" retval=0 # setting environment variables LANG=C LC_ALL=C PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/tokyotyrant/bin" export LANG LC_ALL PATH # start the server start(){ printf 'Starting the server of Tokyo Tyrant\n' mkdir -p "$basedir" if [ -z "$basedir" ] || [ -z "$port" ] || [ -z "$pidfile" ] || [ -z "$dbname" ] ; then printf 'Invalid configuration\n' retval=1 elif ! [ -d "$basedir" ] ; then printf 'No such directory: %s\n' "$basedir" retval=1 elif [ -f "$pidfile" ] ; then pid=`cat "$pidfile"` printf 'Existing process: %d\n' "$pid" retval=1 else if [ -n "$maxcon" ] ; then ulimit -n "$maxcon" >/dev/null 2>&1 fi cmd="$cmd -port $port -dmn -pid $pidfile" if [ -n "$logfile" ] ; then cmd="$cmd -log $logfile" fi if [ -n "$ulogdir" ] ; then mkdir -p "$ulogdir" cmd="$cmd -ulog $ulogdir" fi if [ -n "$ulimsiz" ] ; then cmd="$cmd -ulim $ulimsiz" fi if [ -n "$sid" ] ; then cmd="$cmd -sid $sid" fi if [ -n "$mhost" ] ; then cmd="$cmd -mhost $mhost" fi if [ -n "$mport" ] ; then cmd="$cmd -mport $mport" fi if [ -n "$rtsfile" ] ; then cmd="$cmd -rts $rtsfile" fi if [ -n "$ext" ] ; then cmd="$cmd -ext $ext" fi if [ -n "$extpc" ] ; then cmd="$cmd -extpc $extpc" fi printf "Executing: %s\n" "$cmd" cmd="$cmd $dbname" $cmd if [ "$?" -eq 0 ] ; then printf 'Done\n' else printf 'The server could not started\n' retval=1 fi fi } # stop the server stop(){ printf 'Stopping the server of Tokyo Tyrant\n' if [ -f "$pidfile" ] ; then pid=`cat "$pidfile"` printf "Sending the terminal signal to the process: %s\n" "$pid" kill -TERM "$pid" c=0 while true ; do sleep 0.1 if [ -f "$pidfile" ] ; then c=`expr $c + 1` if [ "$c" -ge 100 ] ; then printf 'Hanging process: %d\n' "$pid" retval=1 break fi else printf 'Done\n' break fi done else printf 'No process found\n' retval=1 fi } # send HUP to the server for log rotation hup(){ printf 'Sending HUP signal to the server of Tokyo Tyrant\n' if [ -f "$pidfile" ] ; then pid=`cat "$pidfile"` printf "Sending the hangup signal to the process: %s\n" "$pid" kill -HUP "$pid" printf 'Done\n' else printf 'No process found\n' retval=1 fi } # check permission if [ -d "$basedir" ] && ! touch "$basedir/$$" >/dev/null 2>&1 then printf 'Permission denied\n' exit 1 fi rm -f "$basedir/$$" # dispatch the command case "$1" in start) start ;; stop) stop ;; restart) stop start ;; hup) hup ;; *) printf 'Usage: %s {start|stop|restart|hup}\n' "$prog" exit 1 ;; esac # exit exit "$retval" # END OF FILE
Tokyo Tyrant インストール
ソースコード取得。
logrotateに登録。
/home/ttserver/data/ttserver.logにTokyo Tyrantのログが書き出されますが、放置しておくと肥大化します。
そのため、ログをローテーションする仕組みに任せてます。
Tokyo Tyrantの起動停止スクリプトがHUPをフォローしてくれているので、これだけでOK。
ここまでやっておけば、永続化機能のついた、OSごと再起動が掛かっても勝手に復活するようになります。
- # cd /usr/local/src
- # wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.9.tar.gz
- # wget http://1978th.net/tokyotyrant/tokyotyrant-1.1.40.tar.gz
# cd /usr/local/src # wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.9.tar.gz # wget http://1978th.net/tokyotyrant/tokyotyrant-1.1.40.tar.gzTokyoCabinetインストール。
- # tar zxvf ./tokyocabinet-1.4.9.tar.gz
- # cd tokyocabinet-1.4.9
- # ./configure
- # make
- # make install
# tar zxvf ./tokyocabinet-1.4.9.tar.gz # cd tokyocabinet-1.4.9 # ./configure # make # make installTokyoTyrantインストール。
- # tar zxvf tokyotyrant-1.1.40.tar.gz
- # cd tokyotyrant-1.1.40
- # ./configure
- # make
- # make install
# tar zxvf tokyotyrant-1.1.40.tar.gz # cd tokyotyrant-1.1.40 # ./configure # make # make installTokyo Tyrantの起動スクリプトに以下を追加。
- # vi /usr/local/tokyotyrant/sbin/ttservctl
- # chkconfig: 345 65 55
- # description: Startup script for the server of Tokyo Tyrant
- # processname: tokyotyrant
# vi /usr/local/tokyotyrant/sbin/ttservctl # chkconfig: 345 65 55 # description: Startup script for the server of Tokyo Tyrant # processname: tokyotyrant/etc/init.dにリンクを作ってchkconfigに登録&確認。
- # ln -s /usr/local/tokyotyrant/sbin/ttservctl /etc/init.d/
- # chkconfig --add ttservctl
- # chkconfig --list ttservctl
- ttservctl 0:off 1:off 2:off 3:on 4:on 5:on 6:off
# ln -s /usr/local/tokyotyrant/sbin/ttservctl /etc/init.d/ # chkconfig --add ttservctl # chkconfig --list ttservctl ttservctl 0:off 1:off 2:off 3:on 4:on 5:on 6:off
logrotateに登録。
/home/ttserver/data/ttserver.logにTokyo Tyrantのログが書き出されますが、放置しておくと肥大化します。
そのため、ログをローテーションする仕組みに任せてます。
Tokyo Tyrantの起動停止スクリプトがHUPをフォローしてくれているので、これだけでOK。
ここまでやっておけば、永続化機能のついた、OSごと再起動が掛かっても勝手に復活するようになります。
- # vi /etc/logrotate.d/tokyotyrant
- /home/ttserver/data/ttserver.log {
- monthly
- missingok
- rotate 12
- compress
- ifempty
- create
- sharedscripts
- postrotate
- /sbin/service ttservctl hup > /dev/null 2>/dev/null || true
- endscript
- }
# vi /etc/logrotate.d/tokyotyrant /home/ttserver/data/ttserver.log { monthly missingok rotate 12 compress ifempty create sharedscripts postrotate /sbin/service ttservctl hup > /dev/null 2>/dev/null || true endscript }参考サイト
登録:
投稿 (Atom)