読者です 読者をやめる 読者になる 読者になる

Tracの付属のWebサーバtracdをデーモン化する

f:id:rankasan:20170318093239p:plain

Raspberry PiへのTracのインストールからサーバ起動までを記事にしました。しかし、あのままではログアウトするとtracdが終了してしまいます。という訳でtracdをデーモン化して動かすようにします。その作業メモになります

/etc/init.dに起動スクリプトを作成します。すでに作成している方がいらっしゃったので、丸パクリします

Start Trac on Startup – Init.d Script for tracd

#!/bin/sh
### BEGIN INIT INFO
# Provides:          tracd
# Required-Start:    networking
# Required-Stop:     networking
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start the tracd standalone Trac web server.
### END INIT INFO
# (C) 2008 Guy Rutenberg <http://www.guyrutenberg.com>
 
## Options you should probably change ##
HOSTNAME=127.0.0.1 # to which hostname should we listen
# If you only want to serve one project keep this variable
# empty and set the PROJECT_ENV variable 
ENV_PARENT_DIR=/home/guyru/trac.guyrutenberg.com
PROJECT_ENV=
PORT=9090
# add any additional options (such as authentication) here. If you only have one
# project you should probably add -s here
ADDITIONAL_OPTS=
 
## Options you should probably not change ##
DAEMON=/usr/bin/tracd
NAME=tracd
DESC="web server"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
SSD="/sbin/start-stop-daemon"
 
test -x $DAEMON || exit 1
 
set -e
 
. /lib/lsb/init-functions
 
DAEMON_OPTS="--daemonize --pidfile=$PIDFILE --port=$PORT --hostname=$HOSTNAME $ADDITIONAL_OPTS"
if [ -n "$ENV_PARENT_DIR" ]; then
	DAEMON_OPTS="$DAEMON_OPTS --env-parent-dir=$ENV_PARENT_DIR"
else
	DAEMON_OPTS="$DAEMON_OPTS $PROJECT_ENV"
fi
 
case "$1" in
  start)
	log_daemon_msg "Starting $DESC" $NAME
	if ! $SSD --start --quiet\
	--pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS ; then
            log_end_msg 1
	else
            log_end_msg 0
	fi
    ;;
  stop)
	log_daemon_msg "Stopping $DESC" $NAME
	if $SSD --stop --retry 30\
	--pidfile $PIDFILE ; then
	    rm -f $PIDFILE
	    log_end_msg 0
	else
	    log_end_msg 1
	fi
	;;
  restart|force-reload)
	$0 stop
	[ -r  $PIDFILE ] && while pidof -x $NAME |\
		 grep -q `cat $PIDFILE 2>/dev/null` 2>/dev/null ; do sleep 1; done
	$0 start
	;;
  *)
	echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
	exit 1
	;;
esac
 
exit 0

以上のスクリプトを作成すのですが、私の環境では起動コマンドにHOST_NAMEがあると、プロセスは起動するのですがlistenしてくれません。なので、上記スクリプトのオプション文字列を作成する箇所からHOST_NAMEを削除しました

DAEMON_OPTS="--daemonize --pidfile=$PIDFILE --port=$PORT $ADDITIONAL_OPTS"

ホスト名をちゃんと付けてないのが悪いんでしょうけどね…さて、作成したスクリプトは/etc/init.d/tracdに保存します。実行権限をつける事をお忘れなく。起動・終了は次の通り

# /etc/init.d/tracd start [ ok ] Starting web server: tracd. 
# /etc/init.d/tracd stop [ ok ] Stopping web server: tracd. 

これで、tracdをデーモン化することができました

HOSTNAME ホスト名
ENV_PARENT_DIR プロジェクトの親ディレクトリを指定
PROJECT_ENV プロジェクトが1つのときに、そのディレクトリを指定。ENV_PARENT_DIRに設定されている時は無視される
PORT ポート番号
ADDITIONAL_OPTS tracd起動時に渡す追加オプションを指定。前回の記事の設定を例にとると
--basic-auth="*,/home/trac/.htpasswd,"
を記載する

以上のスクリプトを作成すのですが、私の環境では起動コマンドにHOST_NAMEがあると、プロセスは起動するのですがlistenしてくれません。なので、上記スクリプトのオプション文字列を作成する箇所からHOST_NAMEを削除しました

DAEMON_OPTS="--daemonize --pidfile=$PIDFILE --port=$PORT $ADDITIONAL_OPTS"

ホスト名をちゃんと付けてないのが悪いんでしょうけどね…

さて、作成したスクリプトは/etc/init.d/tracdに保存します。実行権限をつける事をお忘れなく。起動・終了は次の通り

# /etc/init.d/tracd start
[ ok ] Starting web server: tracd.
# /etc/init.d/tracd stop
[ ok ] Stopping web server: tracd.

これで、tracdをデーモン化することができました

〔改訂〕Trac入門 ~ソフトウェア開発・プロジェクト管理活用ガイド (Software Design plus)

〔改訂〕Trac入門 ~ソフトウェア開発・プロジェクト管理活用ガイド (Software Design plus)

 
プライバシーポリシー