123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- #!/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
- }
|