#!/bin/bash /etc/rc.common
|
|
|
|
START=99
|
|
APP=seahub
|
|
EXTRA_HELP=" clearsessions Clears expired sessions from database"
|
|
EXTRA_COMMANDS="clearsessions"
|
|
|
|
SEAHUB_FASTCGI=0
|
|
SEAHUB_PORT=8000
|
|
SEAHUB_METHOD=threaded
|
|
SEAHUB_WORKERS=3
|
|
|
|
[ -f /etc/config/seafile ] && \
|
|
. /etc/config/seafile
|
|
|
|
INSTALLPATH=/usr/share/seafile/seafile-server
|
|
TOPDIR=$(dirname "${INSTALLPATH}")
|
|
default_ccnet_conf_dir=${TOPDIR}/ccnet
|
|
central_config_dir=${TOPDIR}/conf
|
|
|
|
manage_py=${INSTALLPATH}/seahub/manage.py
|
|
gunicorn_conf=${INSTALLPATH}/runtime/seahub.conf
|
|
pidfile=/var/run/seafile/seahub.pid
|
|
errorlog=${INSTALLPATH}/runtime/error.log
|
|
accesslog=${INSTALLPATH}/runtime/access.log
|
|
gunicorn_exe=/usr/bin/gunicorn
|
|
|
|
function check_python_executable() {
|
|
if [[ "$PYTHON" != "" && -x $PYTHON ]]; then
|
|
return 0
|
|
fi
|
|
|
|
if which python2.7 2>/dev/null 1>&2; then
|
|
PYTHON=python2.7
|
|
elif which python27 2>/dev/null 1>&2; then
|
|
PYTHON=python27
|
|
else
|
|
echo
|
|
echo "Can't find a python executable of version 2.7 or above in PATH"
|
|
echo "Install python 2.7+ before continue."
|
|
echo "Or if you installed it in a non-standard PATH, set the PYTHON enviroment varirable to it"
|
|
echo
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function validate_ccnet_conf_dir() {
|
|
if [[ ! -d ${default_ccnet_conf_dir} ]]; then
|
|
echo "Error: there is no ccnet config directory."
|
|
echo "Have you run '/etc/init.d/seafile setup'?"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function read_seafile_data_dir() {
|
|
seafile_ini=${default_ccnet_conf_dir}/seafile.ini
|
|
if [[ ! -f ${seafile_ini} ]]; then
|
|
echo "Error: ${seafile_ini} not found."
|
|
exit 1
|
|
fi
|
|
seafile_data_dir=$(cat "${seafile_ini}")
|
|
if [[ ! -d ${seafile_data_dir} ]]; then
|
|
echo "Your seafile server data directory \"${seafile_data_dir}\" is invalid or doesn't exits."
|
|
echo "Please check it first, or create this directory yourself."
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function validate_seahub_running() {
|
|
if pid=$(pgrep -f "${manage_py}" 2>/dev/null); then
|
|
return 1
|
|
elif pid=$(pgrep -f "seahub.wsgi:application" 2>/dev/null); then
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
function validate_port() {
|
|
if ! [[ ${SEAHUB_PORT} =~ ^[1-9][0-9]{1,4}$ ]] ; then
|
|
printf "\033[033m${SEAHUB_PORT}\033[m is not a valid port number\n"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function warning_if_seafile_not_running() {
|
|
if ! pgrep -f "seafile-controller -F ${central_config_dir}" 2>/dev/null 1>&2; then
|
|
echo
|
|
echo "Error: seafile-controller not running. Have you run \"/etc/init.d/seafile start\"?"
|
|
echo
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function prepare_seahub_log_dir() {
|
|
logdir="${TOPDIR}/logs"
|
|
if ! [[ -d "${logsdir}" ]]; then
|
|
if ! mkdir -p "${logdir}"; then
|
|
echo "Error: failed to create log dir \"${logdir}\""
|
|
exit 1
|
|
fi
|
|
fi
|
|
export SEAHUB_LOG_DIR="${logdir}"
|
|
}
|
|
|
|
function before_start() {
|
|
prepare_env
|
|
warning_if_seafile_not_running
|
|
if ! validate_seahub_running; then
|
|
echo "Seahub is already running."
|
|
exit 1
|
|
fi
|
|
prepare_seahub_log_dir
|
|
validate_port
|
|
}
|
|
|
|
function start_seahub() {
|
|
before_start
|
|
echo "Starting seahub at port ${SEAHUB_PORT} ..."
|
|
check_init_admin
|
|
$PYTHON $gunicorn_exe seahub.wsgi:application -c "${gunicorn_conf}" -b "0.0.0.0:${SEAHUB_PORT}" --preload
|
|
|
|
# Ensure seahub is started successfully
|
|
retry=1
|
|
while ! validate_seahub_running && [[ ! -f "${pidfile}" ]] && [[ $retry -lt 120 ]]; do sleep 1; ((retry++)); done
|
|
if ! validate_seahub_running && [[ -f "${pidfile}" ]]; then
|
|
echo
|
|
echo "Seahub is started"
|
|
echo
|
|
else
|
|
printf "\033[33mError: Seahub failed to start.\033[m\n"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function start_seahub_fastcgi() {
|
|
before_start
|
|
|
|
# Returns 127.0.0.1 if SEAFILE_FASTCGI_HOST is unset or hasn't got any value,
|
|
# otherwise returns value of SEAFILE_FASTCGI_HOST environment variable
|
|
address=`(test -z "$SEAFILE_FASTCGI_HOST" && echo "127.0.0.1") || echo $SEAFILE_FASTCGI_HOST`
|
|
|
|
echo "Starting seahub (fastcgi) at ${address}:${SEAHUB_PORT} ..."
|
|
check_init_admin
|
|
$PYTHON "${manage_py}" runfcgi host=${address} port=${SEAHUB_PORT} pidfile=${pidfile} \
|
|
outlog=${accesslog} errlog=${errorlog} maxchildren=${SEAHUB_WORKERS} method=${SEAHUB_METHOD}
|
|
|
|
# Ensure seahub is started successfully
|
|
retry=1
|
|
while ! validate_seahub_running && [[ ! -f "${pidfile}" ]] && [[ $retry -lt 120 ]]; do sleep 1; ((retry++)); done
|
|
if ! validate_seahub_running && [[ -f "${pidfile}" ]]; then
|
|
echo
|
|
echo "Seahub is started"
|
|
echo
|
|
else
|
|
printf "\033[33mError: Seahub failed to start.\033[m\n"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function prepare_env() {
|
|
check_python_executable
|
|
validate_ccnet_conf_dir
|
|
read_seafile_data_dir
|
|
|
|
export CCNET_CONF_DIR=${default_ccnet_conf_dir}
|
|
export SEAFILE_CONF_DIR=${seafile_data_dir}
|
|
export SEAFILE_CENTRAL_CONF_DIR=${central_config_dir}
|
|
export PYTHONPATH="${INSTALLPATH}/seahub:${INSTALLPATH}/seahub/thirdpart:${PYTHONPATH}"
|
|
}
|
|
|
|
function clear_sessions() {
|
|
prepare_env
|
|
|
|
echo "Start clear expired session records ..."
|
|
$PYTHON "${manage_py}" clearsessions
|
|
|
|
echo
|
|
echo "Done"
|
|
echo
|
|
}
|
|
|
|
function stop_seahub() {
|
|
if [[ -f ${pidfile} ]]; then
|
|
pid=$(cat "${pidfile}")
|
|
echo "Stopping seahub ..."
|
|
kill ${pid}
|
|
rm -f ${pidfile}
|
|
retry=1
|
|
while ! validate_seahub_running && [ $retry -lt 60 ]; do sleep 1; ((retry++)); done
|
|
if ! validate_seahub_running; then
|
|
echo "Error: seahub cannot be stopped. Please try stopping it manually by running \"kill $(echo "$pid" | tr '\n' ' ')\"."
|
|
echo "To force killing the processes, use \"kill -9 $(echo "$pid" | tr '\n' ' ')\"."
|
|
fi
|
|
else
|
|
echo "Seahub is not running"
|
|
fi
|
|
}
|
|
|
|
function check_init_admin() {
|
|
check_init_admin_script=${INSTALLPATH}/check_init_admin.py
|
|
if ! $PYTHON $check_init_admin_script; then
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function start() {
|
|
if [ "$SEAHUB_FASTCGI" == "1" ]; then
|
|
start_seahub_fastcgi
|
|
else
|
|
start_seahub
|
|
fi
|
|
}
|
|
|
|
function stop() {
|
|
stop_seahub
|
|
}
|
|
|
|
function restart() {
|
|
stop
|
|
start
|
|
}
|
|
|
|
function clearsessions() {
|
|
clear_sessions
|
|
}
|