Pushkin Lemmatized Concordance 起動方法

Pushkin Lemmatized Concordance Web サービスのコーパス構築プログラムの改訂に伴い,サービス開始・終了方法を変更した。運用備忘録。

システム開始・Web サーバ起動後,以下のシェルスクリプト corpusbuild.sh-s オプション指定で実行する。sudo -u www -g www は不要。

#!/bin/sh
# Corpus Shared Memory Building Manager
# 2014(c) isao yasuda.
# $Id: corpusbuild.sh 50 2014-06-09 07:18:37Z isao $
 
# programms
CLD=/usr/local/bin/CorpusLoaderDaemon
WLD=/usr/local/bin/WordTreeBuilderDaemon
# Corpus files
COR=/usr/local/etc/pushkin/pushkin.txt
TDB=/usr/local/etc/pushkin/titledb.txt
# admin directroy
VDR=/var/pushkin_concordance
# pid files
CPID=$VDR/CorpusLoader.pid
WPID=$VDR/WordTreeBuilder.pid
# log file
LOGF=$VDR/daemon.log
# shared memory handle configuration file
CONF=$VDR/concordance.conf
 
ARGC=$#
OSN=`uname -s`
apache=/usr/local/sbin/apachectl
if [ "$OSN" = "Darwin" ]; then
    apache=/usr/sbin/apachectl
fi
 
# functions
usage () {
    if [ $ARGC -ne 1 ]; then
        echo "Usage: `basename $0` [start(-s)|stop(-t)|restart(-r)|log(-l)]"
        exit
    fi
}
 
start () {
    # CorpusLoaderDaemon 起動
    $CLD $COR $TDB
    sleep 15
    # pid ファイルが "STARTING" の間は次に行かない。
    if [ -f $CPID ]; then
        PN=`cat $CPID`
        while [ "$PN" = "STARTING" ]
        do
            sleep 3
            PN=`cat $CPID`
        done
    fi
    echo '* CorpusLoader daemon started.'
 
    # WordTreeBuilderDaemon 起動
    $WLD $COR
    sleep 15
    # pid ファイルが "STARTING" の間は次に行かない。
    if [ -f $WPID ]; then
        PN=`cat $WPID`
        while [ "$PN" = "STARTING" ]
        do
            sleep 3
            PN=`cat $WPID`
        done
    fi
    echo '* WordTreeBuilder daemon started.'
    echo '* Concordance Configuration:'
    cat $CONF
 
    # Apache 再起動
    $apache restart
    echo '* Apache restarted.'
}
 
stop () {
    kill -TERM `cat $CPID`
    echo '* CorpusLoader daemon terminated.'
    kill -TERM `cat $WPID`
    echo '* WordTreeBuilder daemon terminated.'
}
         
# main procedure
usage
echo \* Pushkin Concordance Corpus Building started at \
    `date +%Y-%m-%d\ %H:%M:%S`
case "$1" in
    start | -s)
        start
        ;;
    stop  | -t)
        stop
        ;;
    restart | -r)
        stop
        start
        ;;
    log | -l)
        tail -100 -f $LOGF
        ;;
    *)
        echo "$1: operand invalid."
        usage
        ;;
esac
echo \* Pushkin Concordance Corpus Building ended at \
    `date +%Y-%m-%d\ %H:%M:%S`

停止するときは corpushbuild.sh -t


/usr/local/etc/apache22/Includes に以下の FastCGI 構成ファイルを格納して,apache を再起動する。これにより,Wt C++ Toolkit ベースの Web アプリケーション concordance が初期化されサービスを開始する。初期化のタイミングでコーパス構築プログラムが出力した共有メモリハンドル構成ファイル concordance.conf を読み込み,共有メモリに展開されたコーパスの開始アドレスをポイントする。

# -*- coding: utf-8; mode: conf; -*-
# fastcgi for FreeBSD
<Directory "/usr/local/www/pushkin">
    order allow,deny
    allow from all
</Directory>
<IfModule mod_fastcgi.c>
    Alias /pushkin/lemmatized/ /usr/local/www/pushkin/
    FastCgiConfig -idle-timeout 600 -maxClassProcesses 20 -maxProcesses 60 
-killInterval 1200 -autoUpdate -initial-env WT_AP_ROOT=/etc/wt
    Fastcgiserver /usr/local/www/pushkin/concordance
</IfModule>

concordance プログラムがきちんと起動したかを apache22 のエラーログで確認する。

[2014-Jun-21 21:52:21.038255] 30326 - [info] "WServer/wtfcgi: initializing relay server"
[2014-Jun-21 21:52:21.053918] 30326 - [info] "config: reading Wt config file: /etc/wt/wt_config.xml (location = '/usr/local/www/pushkin/concordance')"
[2014-Jun-21 21:52:21.055063] 30326 - [info] "wtfcgi: spawned session process: pid = 30327"
[2014-Jun-21 21:52:21.055459] 30326 - [info] "wtfcgi: reading FastCGI stream from stdin"
Concordance config: /var/pushkin_concordance/concordance.conf
Concordance Configuration parameters: 
- CORPUSHDL:116
- TITLDBHDL:14611988
- WORDTAHDL:23004796
- WORDTLHDL:96
Concordance Shared Memory Construction.
[2014-Jun-21 21:52:21.138627] 30327 - [info] "config: reading Wt config file: /etc/wt/wt_config.xml (location = '/usr/local/www/pushkin/concordance')"
[2014-Jun-21 21:52:21.139269] 30327 - [info] "WServer/wtfcgi: initializing shared wtfcgi session process"
[Sat Jun 21 21:52:21 2014] [notice] Apache/2.2.xx (FreeBSD) SVN/x.x.x mod_fastcgi/mod_fastcgi-SNAP-xxxxxxxxxx mod_ssl/x.x.x OpenSSL/x.x.x DAV/2 configured -- resuming normal operations
Concordance Shared Memory Deconstruction.

もしデーモン起動後,コンコーダンスサービスが 500 サーバエラーとなり,apache22 のエラーログに以下のようなエラーが出ていた場合は,前回きちんと停止されずにサーバが再起動され PID ファイルが残っていたため,Shared Memory 構築がなされなかったことが考えられる。

[Mon Jun 21 19:35:50 2014] [warn] FastCGI: server "/Library/WebServer/pushkin/c
oncordance" started (pid 5457)
libc++abi.dylib: terminating with uncaught exception of type boost::interproces
s::interprocess_exception: No such file or directory
[Mon Jun 21 19:35:50 2014] [warn] FastCGI: server "/Library/WebServer/pushkin/c
oncordance" (pid 5457) terminated due to uncaught signal '6' (Abort trap)

このようなときは,PID ファイルを削除して,再度 corpusbuild.sh -s を実行する。