Skip to content

Instantly share code, notes, and snippets.

@luk-
Forked from mstyne/gist:3744554
Created September 18, 2012 17:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save luk-/3744633 to your computer and use it in GitHub Desktop.
Save luk-/3744633 to your computer and use it in GitHub Desktop.
couchdb init, from debian
#!/bin/sh -e
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
### BEGIN INIT INFO
# Provides: couchdb
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Apache CouchDB init script
# Description: Apache CouchDB init script for the database server.
### END INIT INFO
SCRIPT_OK=0
SCRIPT_ERROR=1
DESCRIPTION="database server"
NAME=couchdb
SCRIPT_NAME=`basename $0`
COUCHDB=/usr/bin/couchdb
CONFIGURATION_FILE=/etc/default/couchdb
RUN_DIR=/var/run/couchdb
LSB_LIBRARY=/lib/lsb/init-functions
# Grace time in seconds to give the beam process to stop when we're running the
# stop target. Will end before grace time ends if the process ends sooner.
STOP_GRACE_TIME=5
if test ! -x $COUCHDB; then
exit $SCRIPT_OK
fi
if test -r $CONFIGURATION_FILE; then
. $CONFIGURATION_FILE
fi
log_daemon_msg () {
# Dummy function to be replaced by LSB library.
echo $@
}
log_end_msg () {
# Dummy function to be replaced by LSB library.
if test "$1" != "0"; then
echo "Error with $DESCRIPTION: $NAME"
fi
return $1
}
if test -r $LSB_LIBRARY; then
. $LSB_LIBRARY
fi
start_couchdb () {
# Start Apache CouchDB as a background process.
command="$COUCHDB -b"
if test -n "$COUCHDB_STDOUT_FILE"; then
command="$command -o $COUCHDB_STDOUT_FILE"
fi
if test -n "$COUCHDB_STDERR_FILE"; then
command="$command -e $COUCHDB_STDERR_FILE"
fi
if test -n "$COUCHDB_RESPAWN_TIMEOUT"; then
command="$command -r $COUCHDB_RESPAWN_TIMEOUT"
fi
if test -n "$COUCHDB_OPTIONS"; then
command="$command $COUCHDB_OPTIONS"
fi
mkdir -p "$RUN_DIR"
cd "$RUN_DIR"
if test -n "$COUCHDB_USER"; then
chown $COUCHDB_USER "$RUN_DIR"
if su $COUCHDB_USER -c "$command" > /dev/null; then
return $SCRIPT_OK
else
return $SCRIPT_ERROR
fi
else
if $command > /dev/null; then
return $SCRIPT_OK
else
return $SCRIPT_ERROR
fi
fi
}
stop_couchdb () {
# Stop the running Apache CouchDB process.
pidFile="$RUN_DIR/couchdb.pid"
if [ ! -r "$pidFile" ]
then
#exists, but can't read it
[ -f "$pidFile" ] && return $SCRIPT_ERROR
#doesn't exist, so assume couchdb is already stopped
return $SCRIPT_OK
fi
pid=`cat $pidFile`
#unset $pidFile
[ -z "$pid" ] && return $SCRIPT_OK
command="$COUCHDB -d"
if test -n "$COUCHDB_OPTIONS"; then
command="$command $COUCHDB_OPTIONS"
fi
# We need `heart`'s pid because its ppid is set to 1 when the beam proc
# ends, thereby hiding itself from our `ps` check bellow.
heart_pid=`ps -f --ppid $pid | grep "heart -pid $pid " | awk '{print $2}'`
[ -n "$heart_pid" ] && heart_pid=",$heart_pid" #for `ps` call formatting
if test -n "$COUCHDB_USER"; then
if ! su $COUCHDB_USER -c "$command" > /dev/null; then
return $SCRIPT_ERROR
fi
else
if ! $command > /dev/null; then
return $SCRIPT_ERROR
fi
fi
i=0
while ps -p $pid$heart_pid --ppid $pid$heart_pid > /dev/null
do
[ $i -ge $STOP_GRACE_TIME ] && return $SCRIPT_ERROR
sleep 1
i=`expr $i + 1`
done
return $SCRIPT_OK
}
display_status () {
# Display the status of the running Apache CouchDB process.
$COUCHDB -s
}
parse_script_option_list () {
# Parse arguments passed to the script and take appropriate action.
case "$1" in
start)
log_daemon_msg "Starting $DESCRIPTION" $NAME
if start_couchdb; then
log_end_msg $SCRIPT_OK
else
log_end_msg $SCRIPT_ERROR
fi
;;
stop)
log_daemon_msg "Stopping $DESCRIPTION" $NAME
if stop_couchdb; then
log_end_msg $SCRIPT_OK
else
log_end_msg $SCRIPT_ERROR
fi
;;
restart)
log_daemon_msg "Restarting $DESCRIPTION" $NAME
if stop_couchdb; then
if start_couchdb; then
log_end_msg $SCRIPT_OK
else
log_end_msg $SCRIPT_ERROR
fi
else
log_end_msg $SCRIPT_ERROR
fi
;;
status)
display_status
;;
*)
cat << EOF >&2
Usage: $SCRIPT_NAME {start|stop|restart|status}
EOF
exit $SCRIPT_ERROR
;;
esac
}
parse_script_option_list $@
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment