lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

seahub.init (5754B)


      1 #!/bin/bash /etc/rc.common
      2 
      3 START=99
      4 APP=seahub
      5 EXTRA_HELP="	clearsessions	Clears expired sessions from database"
      6 EXTRA_COMMANDS="clearsessions"
      7 
      8 SEAHUB_FASTCGI=0
      9 SEAHUB_PORT=8000
     10 SEAHUB_METHOD=threaded
     11 SEAHUB_WORKERS=3
     12 
     13 [ -f /etc/config/seafile ] && \
     14 	. /etc/config/seafile
     15 
     16 INSTALLPATH=/usr/share/seafile/seafile-server
     17 TOPDIR=$(dirname "${INSTALLPATH}")
     18 default_ccnet_conf_dir=${TOPDIR}/ccnet
     19 central_config_dir=${TOPDIR}/conf
     20 
     21 manage_py=${INSTALLPATH}/seahub/manage.py
     22 gunicorn_conf=${INSTALLPATH}/runtime/seahub.conf
     23 pidfile=/var/run/seafile/seahub.pid
     24 errorlog=${INSTALLPATH}/runtime/error.log
     25 accesslog=${INSTALLPATH}/runtime/access.log
     26 gunicorn_exe=/usr/bin/gunicorn
     27 
     28 function check_python_executable() {
     29 	if [[ "$PYTHON" != "" && -x $PYTHON ]]; then
     30 		return 0
     31 	fi
     32 
     33 	if which python2.7 2>/dev/null 1>&2; then
     34 		PYTHON=python2.7
     35 	elif which python27 2>/dev/null 1>&2; then
     36 		PYTHON=python27
     37 	else
     38 		echo
     39 		echo "Can't find a python executable of version 2.7 or above in PATH"
     40 		echo "Install python 2.7+ before continue."
     41 		echo "Or if you installed it in a non-standard PATH, set the PYTHON enviroment varirable to it"
     42 		echo
     43 		exit 1
     44 	fi
     45 }
     46 
     47 function validate_ccnet_conf_dir() {
     48 	if [[ ! -d ${default_ccnet_conf_dir} ]]; then
     49 		echo "Error: there is no ccnet config directory."
     50 		echo "Have you run '/etc/init.d/seafile setup'?"
     51 		echo ""
     52 		exit 1
     53 	fi
     54 }
     55 
     56 function read_seafile_data_dir() {
     57 	seafile_ini=${default_ccnet_conf_dir}/seafile.ini
     58 	if [[ ! -f ${seafile_ini} ]]; then
     59 		echo "Error: ${seafile_ini} not found."
     60 		exit 1
     61 	fi
     62 	seafile_data_dir=$(cat "${seafile_ini}")
     63 	if [[ ! -d ${seafile_data_dir} ]]; then
     64 		echo "Your seafile server data directory \"${seafile_data_dir}\" is invalid or doesn't exits."
     65 		echo "Please check it first, or create this directory yourself."
     66 		echo ""
     67 		exit 1
     68 	fi
     69 }
     70 
     71 function validate_seahub_running() {
     72 	if pid=$(pgrep -f "${manage_py}" 2>/dev/null); then
     73 		return 1
     74 	elif pid=$(pgrep -f "seahub.wsgi:application" 2>/dev/null); then
     75 		return 1
     76 	fi
     77 }
     78 
     79 function validate_port() {
     80 	if ! [[ ${SEAHUB_PORT} =~ ^[1-9][0-9]{1,4}$ ]] ; then
     81 		printf "\033[033m${SEAHUB_PORT}\033[m is not a valid port number\n"
     82 		exit 1
     83 	fi
     84 }
     85 
     86 function warning_if_seafile_not_running() {
     87 	if ! pgrep -f "seafile-controller -F ${central_config_dir}" 2>/dev/null 1>&2; then
     88 		echo
     89 		echo "Error: seafile-controller not running. Have you run \"/etc/init.d/seafile start\"?"
     90 		echo
     91 		exit 1
     92 	fi
     93 }
     94 
     95 function prepare_seahub_log_dir() {
     96 	logdir="${TOPDIR}/logs"
     97 	if ! [[ -d "${logsdir}" ]]; then
     98 		if ! mkdir -p "${logdir}"; then
     99 		    echo "Error: failed to create log dir \"${logdir}\""
    100 		    exit 1
    101 		fi
    102 	fi
    103 	export SEAHUB_LOG_DIR="${logdir}"
    104 }
    105 
    106 function before_start() {
    107 	prepare_env
    108 	warning_if_seafile_not_running
    109 	if ! validate_seahub_running; then
    110 		echo "Seahub is already running."
    111 		exit 1
    112 	fi
    113 	prepare_seahub_log_dir
    114 	validate_port
    115 }
    116 
    117 function start_seahub() {
    118 	before_start
    119 	echo "Starting seahub at port ${SEAHUB_PORT} ..."
    120 	check_init_admin
    121 	$PYTHON $gunicorn_exe seahub.wsgi:application -c "${gunicorn_conf}" -b "0.0.0.0:${SEAHUB_PORT}" --preload
    122 
    123 	# Ensure seahub is started successfully
    124 	retry=1
    125 	while ! validate_seahub_running && [[ ! -f "${pidfile}"  ]] && [[ $retry -lt 120 ]]; do sleep 1; ((retry++)); done
    126 	if ! validate_seahub_running && [[ -f "${pidfile}" ]]; then
    127 		echo
    128 		echo "Seahub is started"
    129 		echo
    130 	else
    131 		printf "\033[33mError: Seahub failed to start.\033[m\n"
    132 		exit 1
    133 	fi
    134 }
    135 
    136 function start_seahub_fastcgi() {
    137 	before_start
    138 
    139 	# Returns 127.0.0.1 if SEAFILE_FASTCGI_HOST is unset or hasn't got any value,
    140 	# otherwise returns value of SEAFILE_FASTCGI_HOST environment variable
    141 	address=`(test -z "$SEAFILE_FASTCGI_HOST" && echo "127.0.0.1") || echo $SEAFILE_FASTCGI_HOST`
    142 
    143 	echo "Starting seahub (fastcgi) at ${address}:${SEAHUB_PORT} ..."
    144 	check_init_admin
    145 	$PYTHON "${manage_py}" runfcgi host=${address} port=${SEAHUB_PORT} pidfile=${pidfile} \
    146 		outlog=${accesslog} errlog=${errorlog} maxchildren=${SEAHUB_WORKERS} method=${SEAHUB_METHOD}
    147 
    148 	# Ensure seahub is started successfully
    149 	retry=1
    150 	while ! validate_seahub_running && [[ ! -f "${pidfile}"  ]] && [[ $retry -lt 120 ]]; do sleep 1; ((retry++)); done
    151 	if ! validate_seahub_running && [[ -f "${pidfile}" ]]; then
    152 		echo
    153 		echo "Seahub is started"
    154 		echo
    155 	else
    156 		printf "\033[33mError: Seahub failed to start.\033[m\n"
    157 		exit 1
    158 	fi
    159 }
    160 
    161 function prepare_env() {
    162 	check_python_executable
    163 	validate_ccnet_conf_dir
    164 	read_seafile_data_dir
    165 
    166 	export CCNET_CONF_DIR=${default_ccnet_conf_dir}
    167 	export SEAFILE_CONF_DIR=${seafile_data_dir}
    168 	export SEAFILE_CENTRAL_CONF_DIR=${central_config_dir}
    169 	export PYTHONPATH="${INSTALLPATH}/seahub:${INSTALLPATH}/seahub/thirdpart:${PYTHONPATH}"
    170 }
    171 
    172 function clear_sessions() {
    173 	prepare_env
    174 
    175 	echo "Start clear expired session records ..."
    176 	$PYTHON "${manage_py}" clearsessions
    177 
    178 	echo
    179 	echo "Done"
    180 	echo
    181 }
    182 
    183 function stop_seahub() {
    184 	if [[ -f ${pidfile} ]]; then
    185 		pid=$(cat "${pidfile}")
    186 		echo "Stopping seahub ..."
    187 		kill ${pid}
    188 		rm -f ${pidfile}
    189 		retry=1
    190 		while ! validate_seahub_running && [ $retry -lt 60 ]; do sleep 1; ((retry++)); done
    191 		if ! validate_seahub_running; then
    192 			echo "Error: seahub cannot be stopped. Please try stopping it manually by running \"kill $(echo "$pid" | tr '\n' ' ')\"."
    193 			echo "To force killing the processes, use \"kill -9 $(echo "$pid" | tr '\n' ' ')\"."
    194 		fi
    195 	else
    196 		echo "Seahub is not running"
    197 	fi
    198 }
    199 
    200 function check_init_admin() {
    201 	check_init_admin_script=${INSTALLPATH}/check_init_admin.py
    202 	if ! $PYTHON $check_init_admin_script; then
    203 		exit 1
    204 	fi
    205 }
    206 
    207 function start() {
    208 	if [ "$SEAHUB_FASTCGI" == "1" ]; then
    209 		start_seahub_fastcgi
    210 	else
    211 		start_seahub
    212 	fi
    213 }
    214 
    215 function stop() {
    216 	stop_seahub
    217 }
    218 
    219 function restart() {
    220 	stop
    221 	start
    222 }
    223 
    224 function clearsessions() {
    225 	clear_sessions
    226 }