Kouhei Sutou
null+****@clear*****
Wed Aug 15 12:45:13 JST 2012
Kouhei Sutou 2012-08-15 12:45:13 +0900 (Wed, 15 Aug 2012) New Revision: 4f4ec39a83b6ec7d59abf9f971646d3e9f093f00 https://github.com/groonga/gcs/commit/4f4ec39a83b6ec7d59abf9f971646d3e9f093f00 Log: package deb: support daemonization by forever Added files: packages/debian/gcs.logrotate packages/debian/gcs.upstart Modified files: packages/debian/gcs.dirs packages/debian/gcs.init packages/debian/gcs.postinst packages/debian/rules Modified: packages/debian/gcs.dirs (+1 -0) =================================================================== --- packages/debian/gcs.dirs 2012-08-15 12:27:53 +0900 (4b3230a) +++ packages/debian/gcs.dirs 2012-08-15 12:45:13 +0900 (a97840b) @@ -1,2 +1,3 @@ var/lib/gcs +var/log/gcs var/run/gcs Modified: packages/debian/gcs.init (+26 -7) =================================================================== --- packages/debian/gcs.init 2012-08-15 12:27:53 +0900 (b6bba48) +++ packages/debian/gcs.init 2012-08-15 12:45:13 +0900 (7da61b9) @@ -19,26 +19,37 @@ PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="an Amazon CloudSearch compatible open source full text search server" NAME=gcs DAEMON=/usr/sbin/$NAME +LIB_DIR=/usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH` +FOREVER=$LIB_DIR/gcs/node_modules/.bin/forever +LOG_DIR=/var/log/$NAME USER=gcs GROUP=gcs PORT=7575 PIDFILE=/var/run/gcs/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME +NODE_ENV=production OPTION_ARGS="" START_STOP_DAEMON_ARGS="" ENABLE="no" +export NODE_ENV + DEFAULT_FILE=/etc/default/gcs # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 +[ -x "$FOREVER" ] || exit 0 # Read configuration variable file if it is present [ -r $DEFAEULT_FILE ] && . $DEFAULT_FILE [ "$ENABLE" = "yes" ] || exit 0 -DAEMON_ARGS="--daemon --pid-file ${PIDFILE}" +FOREVER_ARGS="--append --pidFile ${PIDFILE}" +FOREVER_ARGS="$FOREVER_ARGS -l $LOG_DIR/forever.log" +FOREVER_ARGS="$FOREVER_ARGS -o $LOG_DIR/output.log" +FOREVER_ARGS="$FOREVER_ARGS -e $LOG_DIR/error.log" +DAEMON_ARGS="" if [ -n "${PORT}" ]; then DAEMON_ARGS="${DAEMON_ARGS} --port ${PORT}" fi @@ -77,10 +88,11 @@ do_start() # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started - start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \ - ${START_STOP_DAEMON_ARGS} --test > /dev/null || return 1 - start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \ - ${START_STOP_DAEMON_ARGS} -- $DAEMON_ARGS || return 2 + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec \ + $FOREVER $START_STOP_DAEMON_ARGS --test > /dev/null || return 1 + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec \ + $FOREVER $START_STOP_DAEMON_ARGS -- \ + start $FOREVER_ARGS $DAEMON $DAEMON_ARGS || return 2 # Add code here, if necessary, that waits for the process to be ready # to handle requests from services started subsequently which depend # on this one. As a last resort, sleep for some time. @@ -97,6 +109,12 @@ do_stop() # 2 if daemon could not be stopped # other if a failure occurred + [ $FOREVER list $FOREVER_ARGS | \ + grep --quiet "No forever processes running" ] && return 1 + + [ $FOREVER stop $FOREVER_ARGS $DAEMON 2>&1 | \ + grep --quiet "error" ] && return 2 + start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \ --pidfile $PIDFILE --name $NAME RETVAL="$?" @@ -107,7 +125,8 @@ do_stop() # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. - start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON + start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 \ + --exec $FOREVER [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE @@ -123,7 +142,7 @@ do_reload() { # restarting (for example, when it is sent a SIGHUP), # then implement that here. # - start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME + $FOREVER restart $FOREVER_ARGS $DAEMON $DAEMON_ARGS return 0 } Added: packages/debian/gcs.logrotate (+13 -0) 100644 =================================================================== --- /dev/null +++ packages/debian/gcs.logrotate 2012-08-15 12:45:13 +0900 (cc865aa) @@ -0,0 +1,13 @@ +/var/log/gcs/*.log { + daily + missingok + rotate 30 + compress + delaycompress + notifempty + create 640 gcs gcs + sharedscripts + postrotate + service gcs status && service gcs restart + endscript +} Modified: packages/debian/gcs.postinst (+4 -2) =================================================================== --- packages/debian/gcs.postinst 2012-08-15 12:27:53 +0900 (f07bac9) +++ packages/debian/gcs.postinst 2012-08-15 12:45:13 +0900 (29b53c1) @@ -11,10 +11,12 @@ add_system_user() { } fixperms() { + dpkg-statoverride --list /var/lib/gcs >/dev/null || \ + dpkg-statoverride --update --add gcs gcs 0750 /var/lib/gcs + dpkg-statoverride --list /var/lob/gcs >/dev/null || \ + dpkg-statoverride --update --add gcs gcs 0750 /var/log/gcs dpkg-statoverride --list /var/run/gcs >/dev/null || \ dpkg-statoverride --update --add gcs gcs 0755 /var/run/gcs - dpkg-statoverride --list /var/lib/gcs >/dev/null || \ - dpkg-statoverride --update --add gcs gcs 0755 /var/lib/gcs } case "$1" in Added: packages/debian/gcs.upstart (+14 -0) 100644 =================================================================== --- /dev/null +++ packages/debian/gcs.upstart 2012-08-15 12:45:13 +0900 (1116b94) @@ -0,0 +1,14 @@ +description 'Groonga CloudSearch' +author 'Yoji Shidara <dara �� shidara.net>' + +start on (filesystem and net-device-up IFACE=lo) +stop on runlevel [!2345] + +env NODE_ENV=production + +setuid gcs +setgid gcs + +script + exec /usr/sbin/gcs +end script Modified: packages/debian/rules (+1 -0) =================================================================== --- packages/debian/rules 2012-08-15 12:27:53 +0900 (617909d) +++ packages/debian/rules 2012-08-15 12:45:13 +0900 (1d22240) @@ -28,6 +28,7 @@ DESTDIR = debian/tmp override_dh_install: npm install --production node-gyp + npm install --production forever npm install --production eval $$(dpkg-architecture); \ -------------- next part -------------- HTML����������������������������...Download