diff options
Diffstat (limited to 'net/seafile-server/files/seahub.init')
-rwxr-xr-x | net/seafile-server/files/seahub.init | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/net/seafile-server/files/seahub.init b/net/seafile-server/files/seahub.init new file mode 100755 index 000000000..da3a1d1a7 --- /dev/null +++ b/net/seafile-server/files/seahub.init @@ -0,0 +1,226 @@ +#!/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 +} |